我们大家都知道ASP.NET为我们提供了文件上传服务器控件FileUpload,默认情况下可上传的最大文件为4M,如果要改变可上传文件大小限制,那么我们可以在web.config中的httpRuntime元素中添加maxRequestLength属性设置大小,同时为了支持大文件上传超时可以添加executionTimeout属性设置超时时间。网上有很多这样的例子,但实际情况是否是这样吗?
httpRuntime maxRequestLength="" executionTimeout=""/
测试环境
IIS 7.5、.NET 3.5 sp1
测试页面UploadFile.aspx
%@ Page Language="C#" AutoEventWireup="true" CodeFile="UploadFile.aspx.cs" Inherits="UploadFile" %!DOCTYPE htmlhtml xmlns="http://www.w3.org/1999/xhtml"head runat="server"meta http-equiv="Content-Type" content="text/html; charset=utf-8"/title/title/headbodyform id="form1" runat="server"pasp:FileUpload ID="FileUpload1" runat="server" /asp:Button ID="Button1" runat="server" Text="Button" //p/form/body/html
测试页面UploadFile.aspx.cs
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));}}}
实际测试
1.上传小于4M的文件
选择2.7M的pdf文件上传
上传提示成功
2. 上传大于4M的文件
选择上传4.3M的pdf文件
上传后报黄页
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.31IDC提供超低价香港云主机,支持【免费试用】,接入CN2直连线路,延时在15ms左右,和大陆地区的体验一样,并提供新人注册优惠,原生IP地址https://www.idctop.com/hongkong/