在IIS下上传大文件如何配置
asp.net程序默认上传文件是有大小限制的,默认是4M。IIS7下默认是30M。因此需要配置几个项目进行支持大文件(最大2G)的上传。
1、配置错误
说明: 在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。
分析器错误消息: 属性“maxRequestLength”的值无效。错误为: 该值必须在 0-2097151 范围内。
如果出现以下错误:
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.Web.HttpException: 超过了最大请求长度。
那是因为配置的maxRequestLength超过了2097151。
解决办法1:
Web.config 配置:
注意修改超时时间:executionTimeout.单位是:秒。
解决办法2:修改Global.asax.cs的Application_BeginRequest方法:
Using System.Web.Configuration; void Application_BeginRequest(object sender, EventArgs e) { //本代码的功能是检查页面请求的大小,如果超过了配置文件maxRequestLength的设定值,就提示用户超过了所允许的文件大小。 //从配置文件里得到配置的允许上传的文件大小 HttpRuntimeSection runTime = (HttpRuntimeSection)WebConfigurationManager.GetSection("system.web/httpRuntime"); //maxRequestLength 为整个页面的大小,不仅仅是上传文件的大小,所以扣除 100KB 的大小, //maxRequestLength单位为KB int maxRequestLength = (runTime.MaxRequestLength) * 1024; //当前请求上下文的HttpApplication实例 //HttpContext context = ((HttpApplication)sender).Context; //判断请求的内容长度是否超过了设置的字节数 if (Request.ContentLength > maxRequestLength) { #region 不理解这些代码存在的意义 /* //得到服务对象 IServiceProvider provider = (IServiceProvider)context; HttpWorkerRequest workerRequest = (HttpWorkerRequest)provider.GetService(typeof(HttpWorkerRequest)); //检查请求是否包含正文数据 if (workerRequest.HasEntityBody()) { //请求正文数据的长度 int requestLength = workerRequest.GetTotalEntityBodyLength(); //得到加载的初始字节数 int initialBytes = 0; if (workerRequest.GetPreloadedEntityBody() != null) initialBytes = workerRequest.GetPreloadedEntityBody().Length; //检查是否所有请求数据可用 if (!workerRequest.IsEntireEntityBodyIsPreloaded()) { byte[] buffer = new byte[512000]; //设置要接收的字节数为初始字节数 int receivedBytes = initialBytes; //读取数据,并把所有读取的字节数加起来,判断总的大小 while (requestLength - receivedBytes >= initialBytes) { //读取下一块字节 initialBytes = workerRequest.ReadEntityBody(buffer, buffer.Length); //更新接收到的字节数 receivedBytes += initialBytes; } initialBytes = workerRequest.ReadEntityBody(buffer, requestLength - receivedBytes); } } */ #endregion //注意这里可以跳转,可以直接终止;在VS里调试时候得不到想要的结果,通过IIS才能得到想要的结果;FW4.0经典或集成都没问题 htm = htm&("请求大小" + Request.ContentLength); Response.End(); } } |
2、问题:HTTP 错误 404.13 - Not Found
HTTP 错误 404.13 - Not Found
请求筛选模块被配置为拒绝超过请求内容长度的请求。
最可能的原因:
•Web 服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值。
可尝试的操作:
•确认 applicationhost.config 或 web.config 文件中的 configuration/system.webServer/security/requestFiltering/requestLimits@maxAllowedContentLength 设置。
详细错误信息:
模块
RequestFilteringModule
通知
BeginRequest
处理程序
PageHandlerFactory-Integrated
错误代码
0x00000000
原因:Web 服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值(IIS 7 默认文件上传大小时30M)。
解决:更改asp.NET文件上传大小限制
修改IIS的applicationhost.config
文件位置: %windir%/system32/inetsrv/config/applicationhost.config
找到节点,该节点下默认没有 元素。为这个节点添加如下元素: (上传的大小将改为2G)
web.config中,添加如下内容
说明:
httpRuntime 配置 ASP.Net HTTP 运行时设置,以确定如何处理对 ASP.NET 应用程序的请求。
maxRequestLength (指示 ASP.NET 支持的最大文件上载大小)
指定输入流缓冲阈值限制(以 KB 为单位)。此限制可用于防止拒绝服务攻击;例如,因用户向服务器发送大型文件而导致的拒绝服务攻击。
默认值为 4096 (4 MB),最大值只能是2097151K。
executionTimeout
指定在被 ASP.NET 自动关闭前,允许执行请求的最大秒数。默认90秒。
只有当 compilation 元素中的调试属性为 False 时,此超时属性才适用。若要帮助避免在调试期间关闭应用程序,请不要将此超时属性设置为较大值。
web.config中,把以下内容加在节点
上述中maxAllowedContentLengt是以BK为单位。