﻿# ASP.NET 當上傳檔案過大時任何回應瀏覽器的動作都無效

基本的 HTTP 通訊協定就是 Browser 對 Server 發出 HTTP Request 指令，Server 收到 HTTP Request 指令後開始進行資料的運算與處理，然後從 Server 回應 HTTP Response 給 Browser，Browser 收到 HTTP Response 指令後負責處理網頁的顯示或網頁轉向等動作。

所以當你透過 HTTP 上傳過大的檔案時，雖然 ASP.NET 程式有開始執行，但是只要執行到 ASP.NET 設定的 maxRequestLength 上限時，就會將此次的 HTTP 對話直接關閉 ( 斷線 )，導致 Browser 無法完成 HTTP Request 這個動作，所以連 HTTP Request 都沒有完成的情況下，怎麼可能還從 Server 那邊得到 HTTP Response 指令！所以 Browser 根本不知道如何處理接下來的動作，這時如果你是使用 Internet Explorer 瀏覽器的話，就會出現 IE 預設的錯誤訊息 ( *請檢查您的網際網路連線。嘗試瀏覽其他網站，確定您已連線至網際網路。* )，使用者會感覺上好像 Server 端的程式出錯了，但是其實是 Browser 無法處理 HTTP 指令才導致這個畫面的出現。

所以你寫的任何要回應給 Browser 的程式都是沒有用的 ( 例如:  Response.Redirect("Error.htm"); )，Browser 完全接收不到喔!! 也因此這問題不只在 ASP.NET 會發生，在其他的 Web 應用平台都會有類似的問題，但這說穿了也不應該是個問題，你只要了解 HTTP 的運作機制，就不難了解為什麼會這樣!

寫程式最重要的就是基礎觀念有沒有紮實學好! 沒有好的觀念無法真正寫好程式，但問題遇到了解決不了或無法理解大部分的時候是正常的，反正多看書、多寫程式就會多學到一點經驗。

一般來說 ASP.NET 預設的檔案上傳限制為 4096 (4 MB)，如果要調大檔案上傳的限制必須要調整 web.config 中在 <system.web> 區段下新增一個 <httpRuntime> 設定。例如我們要將上傳限制調整為 20MB 的話 (20MB = 20 \* 1024KB = 20480KB)，可以參考以下設定：

```
<configuration>
  <system.web>
    <httpRuntime maxRequestLength="20480" executionTimeout="300"/>
  </system.web>
</configuration>
```

**相關網址**

-   [HTTP - Hypertext Transfer Protocol](http://www.w3.org/Protocols/ "HTTP - Hypertext Transfer Protocol")
-   asp.net 2.0上傳檔案大小限制
-   [ASP.NET 2.0 檔案上傳的處理](http://jessewth.blogspot.com/2007/10/aspnet-20.html "ASP.NET 2.0 檔案上傳的處理")
-   [Large file uploads in ASP.NET](https://weblogs.asp.net/jongalloway/large-file-uploads-in-asp-net "Large file uploads in ASP.NET")
-   [介紹幾套好用的檔案上傳元件](/post/2008/02/25/Introduce-FileUpload-Component-using-JavaScript-Flash-IFRAME "介紹幾套好用的檔案上傳元件")
-   [ASP.NET 無法上載大型檔案(大於 4MB)](http://blogs.msdn.com/jchiou/archive/2008/03/10/asp-net-4mb.aspx)
