[ASP.NET] File Upload 上傳檔案大小的限制

ASP.net File Upload Size

前言

從IIS7開始,IIS預設限制28MB左右的要求內容長度,而ASP.net預設則是限制4MB大小

如果一個網站的用戶想上傳100MB檔案,勢必IIS和ASP.net兩邊都要設定

實作

ASP.net Web.config裡寫下以下區段

<system.web>
	<httpRuntime  maxRequestLength="102400" executionTimeout="600"/>
</system.web>

maxRequestLength 檔案大小(KB),預設值4096 KB(4MB),所以102400KB為100MB
executionTimeout 上傳時間(秒),600秒為10分鐘

<system.webServer>
	<security>
		<requestFiltering>
			<requestLimits maxAllowedContentLength="104857600" />
		</requestFiltering>
	</security>
</system.webServer>

maxAllowedContentLength 檔案大小(byte),所以104857600(1024*1024*100)為100MB

上述system.webServer也可以透過IIS來設定

允許的內容長度上限預設值為30000000(約28MB),把它修改為104857600

如此一來,網站便可以上傳100MB大小的檔案了

加碼補充

如果當使用者上傳檔案超過限制大小時,想重新導向到自訂的錯誤頁面

在Global.asax.cs裡寫下...

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("~/MySizeError.aspx");
		}
		catch (Exception ex)
		{
			
		}
	}
}

2019.06.19 如果檔案上傳仍然發生404,而且錯誤畫面有Rejected by UrlScan字眼的話

那是因為主機上安裝了UrlScan軟體(一種WAF軟體) ,請參考:安裝 UrlScan 需注意原始設定會破壞所有中文檔名的連結

記得到安裝資料夾找到urlscan.ini用記事本打開,修改MaxAllowedContentLength=104857600 (表示允許Request內容為100MB)