ASP.NET 上傳檔案的限制

當你在 ASP.NET 2.0 使用 FileUpload 控制項上傳超過 4MB 的檔案時,可能會面臨無法上傳的問題。這是因為上傳內容的長度超過了 maxRequestLength 參數在 Machine.config 檔案所定義的預設上限值 4096 (4 MB),這個限制是 ASP.NET 為了要預防可能的「拒絕服務」攻擊(Denial of Service attacks)。你可以在 Web.config 檔案中,覆寫應用程式 maxRequestLength 的值。例如,下列的 Web.config 設定會允許最大 10 MB 的檔案上傳:
<System.Web>
<httpRuntime maxRequestLength="10240" />
</System.Web>

但是,只要 POST 請求的內容(例如上傳檔案)超過 Web.config 的 maxRequestLength 設定,用戶端就會收到以下的錯誤訊息:「無法顯示網頁:找不到伺服器或 DNS 錯誤」。如果你試圖要在 Page 層級處理這個錯誤將會徒勞無功,因為這是屬於 Application 層級的錯誤,也就是 ASP.NET 早在執行你的網頁程式碼之前,就已經拋出「超出最大的要求長度」的例外。比較好的處理方式是在 Global.asax 加入 Application_BeginRequest 事件處理常式,在檔案未上傳前,先檢查 HTTP 標頭內容的長度,如果超過 maxRequestLength 的設定値,便將用戶端重新導向導引到自訂的錯誤頁面。以下是在 Global.asax 檔案中建立錯誤處理程序的程式碼:
<%@ Application Language="C#" %>
<%@ Import Namespace="System.Web.Configuration" %>
<script runat="server">

void Application_BeginRequest(object sender, EventArgs e)
{
HttpRuntimeSection section = (HttpRuntimeSection)ConfigurationManager.GetSection("system.web/httpRuntime");
int maxFileSize = section.MaxRequestLength*1024;

if (Request.ContentLength > maxFileSize)
{
Response.Redirect("~/FileTooLarge.aspx");
}
}
</script>



Share/Save/Bookmark

4 comments :: ASP.NET 上傳檔案的限制

  1. 剛好要處理這個問題
    感謝...

  2. maxRequestLength的單位應為Byte

  3. 樓上2013/10的匿名回覆有誤!
    maxRequestLength單位為KB沒錯, IIS 7.0 上多了一個 maxAllowedContentLength 屬性,其他單位才為Byte,若是用IIS7.0則後者也要設定,假如你超過預設值30000000 Bytes (~28.6 MB)的話!!!

張貼留言