如何上传大文件啊?
这是我在网上查到了:
第一部分:
    首先我们来说一下如何解决ASP.NET中的文件上传大小限制的问题,我们知道在默认情况下ASP.NET的文件上传大小限制为2M,一般情况下,我们可以采用更改WEB.Config文件来自定义最大文件大小,如下:
<httpRuntime executionTimeout="300" maxRequestLength="40960" useFullyQualifiedRedirectUrl="false"/>
这样上传文件的最大值就变成了4M,但这样并不能让我们无限的扩大MaxRequestLength的值,因为ASP.NET会将全部文件载入内存后,再加以处理。解决的方法是利用隐含的HttpWorkerRequest,用它的GetPreloadedEntityBody和ReadEntityBody方法从IIS为ASP.NET建立的pipe里分块读取数据。实现方法如下:
- C# code
IServiceProviderprovider=(IServiceProvider)HttpContext.Current;HttpWorkerRequestwr=(HttpWorkerRequest)provider.GetService(typeof(HttpWorkerRequest));byte[]bs=wr.GetPreloadedEntityBody();if(!wr.IsEntireEntityBodyIsPreloaded()){Int n=1024;byte[] bs2=newbyte[n];while(wr.ReadEntityBody(bs2,n)>0) { }}这样就可以解决了大文件的上传问题了。
但是我不知道这段代码应该怎么用。。。
我是用WebClient上传文件的,代码如下:
- C# code
string fileName = fileNamePath.Substring(fileNamePath.LastIndexOf("\\") + 1); string uriString = @"D:\" + DateTime.Now.ToShortDateString(); string fileNameExt = fileName.Substring(fileName.LastIndexOf(".") + 1);//文件名称+后缀 if (uriString.EndsWith(@"\") == false) { uriString = uriString + @"\"; } uriString = uriString + fileName; // 创建WebClient实例 WebClient myWebClient = new WebClient(); myWebClient.Credentials = CredentialCache.DefaultCredentials; // 要上传的文件 FileStream fs = new FileStream(fileNamePath, FileMode.Open, FileAccess.Read); BinaryReader r = new BinaryReader(fs); try { //使用UploadFile方法可以用下面的格式 //myWebClient.UploadFile(uriString,"PUT",fileNamePath); byte[] postArray = r.ReadBytes((int)fs.Length); Stream postStream = myWebClient.OpenWrite(uriString, "PUT"); if (postStream.CanWrite) { postStream.Write(postArray, 0, postArray.Length); } else { return "No Write."; } postStream.Close(); return "Succefull"; } catch (Exception ex) { return "Error:" + ex.Message; }当我上传30多兆的文件时可以上传成功,但是上传100多兆的资源时就会报错:Internet Explorer 无法显示该网页,上面这段代码应该怎么用啊?
[解决办法]
楼主看看我的贴子,好多牛人。。。
http://topic.csdn.net/u/20100928/17/7c1e409c-6219-4b13-81e1-8ff1e0534ac2.html
[解决办法]
webclient 走http
用WebCLient也可能会造成内存泄露,
webclient和ftp都可以用来做大文件上传, 做好分块和断点。