Posted on 2005-04-21 16:33
柚子Nan 阅读(7302)
评论(25) 编辑 收藏 所属分类:
[技术.Net]
Asp.net中,上传文件的默认大小是4096 KB,也就是4M,不过你可以在Web.config中更改这个数据
<httpRuntime maxRequestLength="10240"
useFullyQualifiedRedirectUrl="true"
executionTimeout="100"/>
那么此时就是10M的文件,当然你也可以把它修改的更大,但是不管改成多大都会有个极限,如果用户上传的文件比这个值大,就会出现程序Catch不到的异常,因为这个是在运行时才能够监测,如下的错误:
|
Action canceled |
|
|
Internet Explorer was unable to link to the Web page you requested. The page might be temporarily unavailable. |
|
Please try the following:
- Click the Refresh button, or try again later.
- If you have visited this page previously and you want to view what has been stored on your computer, click File, and then click Work Offline.
- For information about offline browsing with Internet Explorer, click the Help menu, and then click Contents and Index.
|
虽然你在代码中控制了大小,不过程序在运行到这里之前已经崩溃了
// Attachment size is too larger
if(PersonPhoto.PostedFile.ContentLength > 10240)
{
this.lblError.Text = "The file you selected is larger than 10MB";
this.lblError.Visible = true;
return;
}
大家有什么办法嘛?
Feedback
实际上文件过大,asp.net会放弃形成页面逻辑,这样就导致了无法catch错误。这样处理有它的好处所在,但是带来的用户体验很不爽,客户往往说你程序有问题。实际上asp.net内置组件这样处理有它的原因,与rfc,http协议以及asp.net内置上传组件的工作模式都有关系。
个人观点,仅供参考。
Anybody know how and why?
Is it a management problem and not a techinical one?
超过了最大请求长度。http://unknownprefix/o" />
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.Web.HttpException: 超过了最大请求长度。
这是我以前碰到这个问题的时候显示的错误提示,光看这个提示应该已经可以知道问题出在哪里了。
我还碰到过一种错误情况是在我对httpmodules进行重写以后。在整个aspx文件载入的过程中(Post Back的情况下),初始化HttpApplication对象时加载这个重写的HttpModules,而此时如果因为maxRequestLength设置过大就会出现页面不报任何错。页面仍然显示postback前的内容。
你的代码怎么可能有用呢
还没有到asp.net handle 的时候就已经出错了.
to Xrinehart :
machine.Config是设置的全部的Asp.net程序的上传大小,但是如果你在自己项目的Web.config中也设置了maxRequestLength,那么,Web.config就会override了machine.Config的值。
谢谢alittlefish 提供的资源,Microsoft已经声明不可以上传过大的文件。
Theoretically, the maximum file upload size is fairly large. However, because of ASP.NET health monitoring, you cannot upload very large files in ASP.NET. The ASP.NET worker process has a virtual address space of 2 gigabytes (GB). However, the ASP.NET worker process only uses a little more than 1 GB because of health monitoring and memory fragmentation.
就是说这样会把服务器崩溃掉。
Microsoft recommends that you use a maximum file size in the range of 10 to 20 megabytes (MB). If you rarely upload files, the maximum file size may be 100 MB.
到目前为止,经过与客户的协商,已经同意在Web.Config中修改为20M,但是实际在代码中监测还是只能上传10M的文件。
(1)可以使用一些无组件上传的asp。net模块(httpModule and HttpHandler)
(2)写一个HttpHandler,简单地判断上传ContentLength大小,而拒绝其继续上传
当不使用第三方组件而仅使用.net自带的功能的话,好像10M已经是实际上的峰值了。可以考虑使用组件,用aspupload组件的话,如果页面响应时间设长点,20M是没有问题的。
>>10M
我在本地试过,应该不止这个数值。当然,如果是生产环境的数据,可能吧。。。毕竟还有带宽的问题。。。。
我试过40MB的文件,带宽为2MB的网络,但是到50MB左右就崩溃了
还要考虑这个问题:
aspnet_wp.exe这个辅助进程的内存使用如果超过了物力内存的60%的话(缺省,可以在Machine.config中的processModel设置),就会u被ASPNET_ISAPI.dll这个进程回收,而Asp.Net处理请求的方式是将整个Request读到内存中,再处理,大概40M文件,可能会用掉80M吧,因此,把这个参数调大些,可以上传更大的文件。当然,对服务器的压力也会大些。
for bestcomy :
按照我的理解,你的组件应该使用了HttpWorkRequest注入,是否?
bestcomy
AspnetUpload企业版
注册价格: 600.00 元/套 ?
文件设置太大了也没有必要,而且如果设置太大了很多客户端可以用这个上传文件的功能把服务器搞崩溃了,可以算是一种攻击!
我也在找相关的处理方法,一直以来没有一个好的解决方法.
可以试试通过客户端的判断,但有一个问题,就是访问者可以绕过客户端的验证!
如果何在ASP.net使用ASPUpload或者W3Upload这样的组件呢?
我试过把aspupload.dll封装成ASP.net下可用的程序集,但使用的时候还有问题,就是总找不到上传的文件,总为空。
还有,bestcomy的控件确实很好用,可惜作者没有想公开里面的技术问题。而且还对程序集进行了加密。
大文件上传,本人已经找了快半个月的信息了,可惜没有太多的功效。看来还是得自己花点时间写一个了。。。
希望能与关注这些技术的同行们交流一下。
WuCountry@126.com
Gotdotnet 上有一个带源码的,叫做SunRise什么的,也是中国人写的。。。。Free
http://www.ntko.com
NTKO附件管理控件是拥有完全独立知识产权的多附件上传控件.使用NTKO附件管理控件[多文件上传控件],能够在浏览器中启动原始文件对应的应用程序,对图像文件,OFFICE文件,文本文件等任何文件进行编辑,打印,阅读,并保存到Web服务器。实现文档的方便编辑和统一管理。支持拖放,修改提示保存,多线程下载上传,多种视图模式,智能提交等多种特性。
NTKO附件管理控件支持包括DOMINO在内的各种后台Web服务器和编程语言。并且可以在浏览器中通过JScript或者VBScrip使用控件提供的属性和方法控制文档操作。在DOMINO中,比INOTES使用更加方便快捷。集成程度更好。
NTKO OFFICE文档控件是一个支持电子签名[数字签名],支持PHP,ASP,JSP,C#,VB.NET,DOMINO等各种web编程语言和服务器的,具有在线编辑,痕迹保留,手写签名,电子印章,全屏批注等功能的OFFICE在线编辑控件。支持Word,Excel,WPS等多种文档。
用这个xuploadfiles,不过客户端要用它提供的组件,上传大文件没问题