[C#][ASP.NET MVC5] FileUpload 上傳檔案大小的限制

ASP.NET為防止駭客利用大檔案進行DOS(Denial Of Service)攻擊,所以把上傳檔案大小限制在4096KB(4MB),因此當上傳檔案超過4MB時,就會收到System.Web.HttpException 超出最大的要求長度的錯誤訊息如下:

01

那如果需要上傳超過4MB的檔案怎麼辦?那就必須修改Web.configsystem.web讓該站自訂大小,修改內容如下:

<system.web>
	<httpRuntime targetFramework="4.5" maxRequestLength="102400" executionTimeout="600"/>
</system.web>
  • maxRequestLength 檔案大小(KB)
  • executionTimeout 上傳時間(秒)

修改完後雖然不會跳出上面的錯誤了,不過卻跳出另外一個訊息:
04

拜了Google才發現,原來 Windows Server 2008 (IIS 7.0) 上又多了一個 maxAllowedContentLength 屬性 (單位為 Byte),於是乎又打開了Web.config找到system.webServer,修改內容如下:

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

其預設值為 30000000 Bytes (~28.6 MB),所以上傳 30 MB 的檔案就會產生錯誤了。這邊我是修改為1 GB (1024 x 1024 x 1024)可視情況調整。


綜合以上的修改結果為:

02

 

如果使用者上傳超過設定的最大上限怎麼辦?是不是又會跳出錯誤訊息?不要害怕,只要在Global.asax裡面處理這項錯誤即可,處理方式如下:

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("~/SizeError.aspx");
		}
		catch (Exception ex)
		{
			Logger logger = LogManager.GetCurrentClassLogger();
			logger.Warn(ex.Message);
		}
	}
}

03

 

結論:

一個簡單的上傳功能,想不到有這麼多眉眉角角需要注意,做這行真是不容易QQ

 

參考:

  1. ASP.NET如何設定檔案上傳大小可超過預設4096KB(4MB)
  2. FileUpload 上傳檔案大小的限制


這裡的資訊對您有用嗎?歡迎斗內給我