作者:思归 微软MVP http://blog.joycode.com/saucer/
我们在上传大文件时都遇到过这样或那样的问题。设置很大的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)
{
.....
}
}
Chris Hynes为我们提供了这样的一个方案(用HttpModule),该方案除了允许你上传大文件外,还能实时显示上传进度:
ASP.NET Upload Magic Part 2
这里有他讲座的PPT文件:
Uploading with ASP.NET (part 1)
Uploading with ASP.NET (part 2)
分享到:
相关推荐
用ASP.NET上传大文件,和基于大文件上传一下常用的控件。
asp.net 上传大文件例子,说明文档,源码 http://www.dotnetdev.cn
基于jquery.form插件写的ASP.NET文件批量上传。
asp.net 上传大文件,并实现进度条显示 。 .net2005 直接运行就OK。。
asp.net上传 可以上传无限大小的文件,同时可以选择多个,也可以设置上传大小
ASP.NET上传图片文件(在客户端验证大小尺寸类型并且利用滤镜预览欲传图片),兼容多种浏览器
进行asp.net下大文件的上传操作,性能不错
asp.net快速上传大文件mvc
asp.net上传 多文件上传 批量上传 上传代码 上载asp.net上传 多文件上传 批量上传 上传代码 上载asp.net上传 多文件上传 批量上传 上传代码 上载asp.net上传 多文件上传 批量上传 上传代码 上载asp.net上传 多文件...
从本地选择的文件,应用asp.net上传文件到服务器。
ASP.NET上传进度条大文件。不错。用了挺好!!有例子
asp.net操作文件的上传、读出、删除等操作!!!
【ASP.NET编程知识】asp.net利用ashx文件实现文件的上传功能.docx
解决ASP.NET上传文件大小限制解决ASP.NET上传文件大小限制
觉得不错,但是有个不足的地方,就是当我上传一个文件时把页面关闭的时候 这个文件其实还在上传着!
asp.net上传大文件组件,不受页面超时限制
asp.net+ajax 实现的多文件上传, 支持文件单独和批量上传,单个和批量移除
基于webuploader的asp.net大文件分片上传,最大可以上传5G左右的东西
可以实现超大文件上传,但是不能断点上传。