ASP.NET為防止駭客利用大檔案進行DOS(Denial Of Service)攻擊,所以把上傳檔案大小限制在4096KB(4MB),因此當上傳檔案超過4MB時,就會收到System.Web.HttpException 超出最大的要求長度的錯誤訊息如下:
那如果需要上傳超過4MB的檔案怎麼辦?那就必須修改Web.config
的system.web
讓該站自訂大小,修改內容如下:
<system.web>
<httpRuntime targetFramework="4.5" maxRequestLength="102400" executionTimeout="600"/>
</system.web>
- maxRequestLength 檔案大小(KB)
- executionTimeout 上傳時間(秒)
修改完後雖然不會跳出上面的錯誤了,不過卻跳出另外一個訊息:
拜了Google才發現,原來 Windows Server 2008 (IIS 7.0) 上又多了一個 maxAllowedContentLength 屬性 (單位為 Byte),於是乎又打開了Web.config
找到system.webServer
,修改內容如下:
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1073741824" />
</requestFiltering>
</security>
</system.webServer>
其預設值為 30000000 Bytes (~28.6 MB),所以上傳 30 MB 的檔案就會產生錯誤了。這邊我是修改為1 GB (1024 x 1024 x 1024)可視情況調整。
綜合以上的修改結果為:
如果使用者上傳超過設定的最大上限怎麼辦?是不是又會跳出錯誤訊息?不要害怕,只要在Global.asax裡面處理這項錯誤即可,處理方式如下:
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpRuntimeSection section = (HttpRuntimeSection)ConfigurationManager.GetSection("system.web/httpRuntime");
int maxFileSize = section.MaxRequestLength * 1024;
if (Request.ContentLength > maxFileSize)
{
try
{
Response.Redirect("~/SizeError.aspx");
}
catch (Exception ex)
{
Logger logger = LogManager.GetCurrentClassLogger();
logger.Warn(ex.Message);
}
}
}
結論:
一個簡單的上傳功能,想不到有這麼多眉眉角角需要注意,做這行真是不容易QQ
參考:
- ASP.NET如何設定檔案上傳大小可超過預設4096KB(4MB)
- FileUpload 上傳檔案大小的限制