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
參考: