asp.net修改上傳文件大小

咱們你們都知道ASP.NET爲咱們提供了文件上傳服務器控件FileUpload,默認狀況下可上傳的最大文件爲4M,若是要改變可上傳文件大小限制,那麼咱們能夠在web.config中的httpRuntime元素中添加maxRequestLength屬性設置大小,同時爲了支持大文件上傳超時能夠添加executionTimeout屬性設置超時時間。網上有不少這樣的例子,但實際狀況是不是這樣嗎? css

<httpRuntime maxRequestLength="5000000" executionTimeout="100"/>
 
實際測試
 
1.上傳小於4M的文件
 
選擇2.7M的pdf文件上傳,上傳提示成功。
2. 上傳大於4M的文件

選擇上傳4.3M的pdf文件,上傳後報黃頁。web

3. 修改web.config文件,設置可上傳文件大小限制windows

修改web.config,增大可上傳文件的大小限制,增大執行時間限制。服務器

<httpRuntime maxRequestLength="2048000" executionTimeout="600"/>框架

從新選擇剛纔4.3M的pdf文件,從新上傳,上傳成功。
4. 上傳大於30M的的文件
碰到這個問題的實際環境是咱們使用了第三方的上傳文件組件,經過js調用第三方的ActiveX控件上傳文件,修改web.config後上傳大於30M的文件的時候,報了以下錯誤

查看windows系統日誌,能夠看到以下的日誌錯誤,看到異常信息,咱們能夠猜想到是請求超長,可是咱們設置了最大請求長度了啊,並且遠遠要大於30M。靜下來想想多是IIS限制的,查詢相關的IIS資料,發現果真是這樣。asp.net

異常消息: 超過了最大請求長度。
在 System.Web.HttpRequest.GetEntireRawContent()
在 System.Web.HttpRequest.GetMultipartContent()
在 System.Web.HttpRequest.FillInFormCollection()
在 System.Web.HttpRequest.EnsureForm()
在 System.Web.HttpRequest.get_HasForm()
在 System.Web.UI.Page.GetCollectionBasedOnMethod(Boolean dontReturnNull)
在 System.Web.UI.Page.DeterminePostBackMode()
在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

 

5. 修改IIS的配置測試

選中本身的站點,並雙擊「請求篩選」,選擇右側的」編輯功能限制」,在彈出的頁面中,咱們看到默認請求限制正是30M,修改請求大小限制爲合適的值便可,保存後重啓站點便可。.net

    

總結日誌

1. Asp.NET做爲微軟的Web服務框架,其定義了web請求的大小限制和執行時間限制。同時其爲上傳文件提供了基礎的框架,併爲咱們提供了UploadFile服務器控件,其最終也是經過Http將文件數據傳輸到服務器端,天然也受請求大小和執行時間的限制,只是通常的請求都打不到這個極限,每每是上傳文件的時候纔會觸及這個閥值。code

2. IIS做爲windows平臺上承載ASP.NET的法定服務器,按照正常邏輯來講,其也能統一設置發送到本身這裏請求的大小限制。同時因爲IIS只將針對特定類型的文件的請求路由到ASP.NET進行處理,像js、css和圖片等請求是不受ASP.NET中請求大小的限制的,這也從一個側面說明有必要再IIS中添加控制。

3. 請求的長度校驗只有先經過IIS的限制後,纔有可能路由到ASP.NET,只有最終經過ASP.NET的長度限制校驗,才能正常的進行後續的管道處理步驟。

相關文章
相關標籤/搜索