咱们你们都知道ASP.NET为咱们提供了文件上传服务器控件FileUpload,默认状况下可上传的最大文件为4M,若是要改变可上传文件大小限制,那么咱们能够在web.config中的httpRuntime元素中添加maxRequestLength属性设置大小,同时为了支持大文件上传超时能够添加executionTimeout属性设置超时时间。网上有不少这样的例子,但实际状况是不是这样吗?css
<httpRuntime maxRequestLength="" executionTimeout=""/>
IIS 7.五、.NET 3.5 sp1html
测试页面UploadFile.aspxweb
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="UploadFile.aspx.cs" Inherits="UploadFile" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:FileUpload ID="FileUpload1" runat="server" /> <asp:Button ID="Button1" runat="server" Text="Button" /> </div> </form> </body> </html>
测试页面UploadFile.aspx.cswindows
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class UploadFile : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (FileUpload1.FileContent != null) { FileUpload1.SaveAs(Server.MapPath("/Files/"+FileUpload1.FileName)); } } }
选择2.7M的pdf文件上传服务器
上传提示成功框架
2. 上传大于4M的文件测试
选择上传4.3M的pdf文件ui
上传后报黄页spa
3. 修改web.config文件,设置可上传文件大小限制日志
修改web.config,增大可上传文件的大小限制,增大执行时间限制
<httpRuntime maxRequestLength="2048000" executionTimeout="600"/>
从新选择刚才4.3M的pdf文件,从新上传
上传成功
4. 上传大于30M的的文件
碰到这个问题的实际环境是咱们使用了第三方的上传文件组件,经过js调用第三方的ActiveX控件上传文件,修改web.config后上传大于30M的文件的时候,报了
以下错误
查看windows系统日志,能够看到以下的日志错误,看到异常信息,咱们能够猜想到是请求超长,可是咱们设置了最大请求长度了啊,并且远远要大于30M。静
下来想想多是IIS限制的,查询相关的IIS资料,发现果真是这样。
异常消息: 超过了最大请求长度。 在 System.Web.HttpRequest.GetEntireRawContent() 在 System.Web.HttpRequest.GetMultipartContent() 在 System.Web.HttpRequest.FillInFormCollection() 在 System.Web.HttpRequest.EnsureForm() 在 System.Web.HttpRequest.get_HasForm() 在 System.Web.UI.Page.GetCollectionBasedOnMethod(Boolean dontReturnNull) 在 System.Web.UI.Page.DeterminePostBackMode() 在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
5. 修改IIS的配置
选中本身的站点,并双击“请求筛选”
选择右侧的”编辑功能限制”
在弹出的页面中,咱们看到默认请求限制正是30M
修改请求大小限制为合适的值便可,保存后重启站点便可。
1. Asp.NET做为微软的Web服务框架,其定义了web请求的大小限制和执行时间限制。同时其为上传文件提供了基础的框架,并为咱们提供了UploadFile服务器控
件,其最终也是经过Http将文件数据传输到服务器端,天然也受请求大小和执行时间的限制,只是通常的请求都打不到这个极限,每每是上传文件的时候才会触及
这个阀值。
2. IIS做为windows平台上承载ASP.NET的法定服务器,按照正常逻辑来讲,其也能统一设置发送到本身这里请求的大小限制。同时因为IIS只将针对特定类型的文
件的请求路由到ASP.NET进行处理,像js、css和图片等请求是不受ASP.NET中请求大小的限制的,这也从一个侧面说明有必要再IIS中添加控制。
3. 请求的长度校验只有先经过IIS的限制后,才有可能路由到ASP.NET,只有最终经过ASP.NET的长度限制校验,才能正常的进行后续的管道处理步骤。