檔案上傳超出限制的處理作法

老生長談...整理一下相關作法:

當你使用 FileUpload 上傳超過 4MB 的檔案時,可能會面臨無法上傳的問題。這是因為上傳內容

的長度超過了maxRequestLength 參數在 Machine.config 檔案所定義的預設上限值 4096 (4 MB),這個限

制是 ASP.NET 為了要預防可能的「拒絕服務」攻擊。你可以在 Web.config 檔案中,覆寫應用程式

maxRequestLength 的值,例如:

image

但是,只要上傳檔案超過 Web.config的maxRequestLength 設定,用戶端就會收到以下的錯誤訊息:

「無法顯示網頁:找不到伺服器或 DNS 錯誤」。如果你要在Page處理這個錯誤將會徒勞無功,因為這是屬於 Application

層級的錯誤,也就是 ASP.NET 早在執行你的網頁程式碼之前,就已經拋出「超出最大的要求長度」的例外。

比較好的處理方式自訂WebModule註冊BeginRequest事件處理常式,在檔案未上傳前,先檢查 HTTP 標頭內容的長度,如果超過

maxRequestLength 的設定値,便將用戶端重新導向導引到自訂的錯誤頁面或導回原來的網頁。程式如下

image

組態設定如下,須注意IIS6與IIS7有部分不同,IIS7的Module須放在System.WebServer內,並先將maxAllowedContentLength設大點

,否則只要超出預設值4mb就連BeginRequest都不會觸發

image

上述的完成後,若你在VisualStudio上是無法成功導頁的,還是會出現反白畫面,

只能在IIS 或裝IS7.5 Express上測試此結果

部分內容引述:

http://renjin.blogspot.com/2008/03/large-file-uploads-in-aspnet.html

這個網誌中的熱門文章

[.NET Core] 將專案發行至IIS

[TFS] 分支與合併