檔案上傳超出限制的處理作法
老生長談...整理一下相關作法:
當你使用 FileUpload 上傳超過 4MB 的檔案時,可能會面臨無法上傳的問題。這是因為上傳內容
的長度超過了maxRequestLength 參數在 Machine.config 檔案所定義的預設上限值 4096 (4 MB),這個限
制是 ASP.NET 為了要預防可能的「拒絕服務」攻擊。你可以在 Web.config 檔案中,覆寫應用程式
maxRequestLength 的值,例如:
但是,只要上傳檔案超過 Web.config的maxRequestLength 設定,用戶端就會收到以下的錯誤訊息:
「無法顯示網頁:找不到伺服器或 DNS 錯誤」。如果你要在Page處理這個錯誤將會徒勞無功,因為這是屬於 Application
層級的錯誤,也就是 ASP.NET 早在執行你的網頁程式碼之前,就已經拋出「超出最大的要求長度」的例外。
比較好的處理方式自訂WebModule註冊BeginRequest事件處理常式,在檔案未上傳前,先檢查 HTTP 標頭內容的長度,如果超過
maxRequestLength 的設定値,便將用戶端重新導向導引到自訂的錯誤頁面或導回原來的網頁。程式如下
組態設定如下,須注意IIS6與IIS7有部分不同,IIS7的Module須放在System.WebServer內,並先將maxAllowedContentLength設大點
,否則只要超出預設值4mb就連BeginRequest都不會觸發
上述的完成後,若你在VisualStudio上是無法成功導頁的,還是會出現反白畫面,
只能在IIS 或裝IS7.5 Express上測試此結果
範例下載:
部分內容引述:
http://renjin.blogspot.com/2008/03/large-file-uploads-in-aspnet.html