主题:  asp.net文件上传的问题

5D荣誉斑竹

职务:普通成员
等级:2
金币:1.0
发贴:343
#12001/11/7 22:06:59
在使用asp.net上传文件的时候,我发现有这样一个问题:上传的文件大小有限制,好像是不能超过4m。
请问,如何能突破这个限制?



张无忌

职务:普通成员
等级:1
金币:0.0
发贴:18
#22001/11/8 21:13:43
這個應該是服務器對超時的反應時間所決定的!上傳這麽大的的東西,本來就不應該用web上傳。



5D荣誉斑竹

职务:普通成员
等级:2
金币:1.0
发贴:343
#32001/11/8 23:13:11
服務器對超時的反應時間?不大可能吧?
我在局域网内部试验,带宽是100m,怎么会有超时的反应?
另外,楼上的老兄,你不知道“领导的话都是对的”吗 :-)))



张无忌

职务:普通成员
等级:1
金币:0.0
发贴:18
#42001/11/9 0:11:48
呵呵呵呵!那我就不知道了!
asp.net只是粗解一些,並不擅長呀。



BendisE

职务:普通成员
等级:1
金币:0.0
发贴:4
#52005/10/27 11:08:16
对于asp.net,默认只允许上传2M文件,增加如下配置,一般可以自定义最大文件大小.

<httpRuntime

executionTimeout="300"

maxRequestLength="40960"

useFullyQualifiedRedirectUrl="false"/>

如果还不行,可以使用思归提供的方案:

我们在上传大文件时都遇到过这样或那样的问题。设置很大的maxRequestLength值并不能完全解决问题,因为ASP.NET会block直到把整个文件载入内存后,再加以处理。实际上,如果文件很大的话,我们经常会见到Internet Explorer显示 "The page cannot be displayed - Cannot find server or DNS Error",好像是怎么也catch不了这个错误。为什么?因为这是个client side错误,server side端的Application_Error是处理不到的,可以参考这个帖子研究一下产生这个错误的机理。

handling server error when upload file too large

解决的方法是利用隐含的HttpWorkerRequest,用它的GetPreloadedEntityBody 和 ReadEntityBody方法从IIS为ASP.NET建立的pipe里分块读取数据

IServiceProvider provider = (IServiceProvider) HttpContext.Current;
HttpWorkerRequest wr = (HttpWorkerRequest) provider.GetService(typeof(HttpWorkerRequest));
byte[] bs = wr.GetPreloadedEntityBody();
....
if (!wr.IsEntireEntityBodyIsPreloaded())
{
int n = 1024;
byte[] bs2 = new byte[n];
while (wr.ReadEntityBody(bs2,n) >0)
{
.....
}
}


还有把你的代码贴出来这样方便解决