技術文檔
我們大家都知道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/
?????????????????????????????????????