解決ASP.NET上傳文件大小限制


第一種方法,主要適用於IIS6.0版本

 

一、修改配置Web.Config文件中的httpRuntime節點
對於asp.net,默認只允許上傳4M文件,增加如下配置,一般可以自定義最大文件大小.
一、修改配置Web.Config文件中的httpRuntime節點
對於asp.net,默認只允許上傳4M文件,增加如下配置,一般可以自定義最大文件大小.

<httpRuntime

executionTimeout="800"

maxRequestLength="40960"

useFullyQualifiedRedirectUrl="false"/>


//executionTimeout預設(即默認)是 90 秒

//可以修改:executionTimeout = "180"

Asp.net支持的最大上傳文件大小

 

在web.config中配置:

 

配置 ASP.NET HTTP 運行庫設置。該節可以在計算機、站點、應用程序和子目錄級別聲明。

<configuration>
   <system.web>
      <httpRuntime>

<httpRuntime useFullyQualifiedRedirectUrl="true|false"
             maxRequestLength="size in kbytes"
             executionTimeout="seconds"
             minFreeThreads="number of threads"
             minFreeLocalRequestFreeThreads="number of threads"
             appRequestQueueLimit="number of requests"
             versionHeader="version string"/>
可選屬性
屬性 選項 說明

useFullyQualifiedRedirectUrl:指示客戶端重定向是否是完全限定的(采用 {HYPERLINK "http://server/path" } 格式,這是某些移動控件所必需的),或者指示是否代之以將相對重定向發送到客戶端。
    true 指定客戶端重定向需要以完全限定的格式發送。這是通過自動將不是完全限定的格式的所有重定向轉換為完全限定的格式來實現的。
    false 指定客戶端重定向不需要被自動轉換為完全限定格式。false 是默認選項。

maxRequestLength:指示 ASP.NET 支持的最大文件上載大小。該限制可用於防止因用戶將大量文件傳遞到該服務器而導致的拒絕服務攻擊。指定的大小以 KB 為單位。默認值為 4096 KB (4 MB)。

executionTimeout:指示在被 ASP.NET 自動關閉前,允許執行請求的最大秒數。

minFreeThreads:允許執行新請求的自由線程的最小數目。ASP.NET 為要求附加線程來完成其處理的請求使這些線程保持自由狀態。

minFreeLocalRequestFreeThreads:ASP.NET 保持的允許執行新的本地請求的自由線程的最小數目。該線程數目是為從本地主機傳入的請求而保留的,以防某些請求在其處理期間發出對本地主機的子請求。這避免了可能的因遞歸重新進入 Web 服務器而導致的死鎖。

appRequestQueueLimit:ASP.NET 將為應用程序排隊的請求的最大數目。當沒有足夠的自由線程來處理請求時,將對請求進行排隊。當隊列超出了該設置中指定的限制時,將通過“503 - 服務器太忙”錯誤信息拒絕傳入的請求。

versionHeader:指定 ASP.NET 隨每個響應所發送的版本頭的值。Microsoft Visual Studio .NET 使用該屬性來確定當前使用的 ASP.NET 版本。這對產品環境來說不是必需的,並且可以通過從 Web.config 或 Machine.config 移除該屬性,或將該屬性設置為空字符串 (versionHeader="") 來將其禁用。

 

示例
以下示例為 ASP.NET 應用程序指定 HTTP 運行時參數。

<configuration>
   <system.web>
      <httpRuntime maxRequestLength="4000"
         useFullyQualifiedRedirectUrl="true"
         executionTimeout="45"
         versionHeader="1.1.4128"/>
   </system.web>
</configuration>

 

二、如果還不行,可以使用思歸提供的方案:

我們在上傳大文件時都遇到過這樣或那樣的問題。設置很大的maxRequestLength值並不能完全解決問題,因為ASP.NET會block直到把整個文件載入內存后,再加以處理。實際上,如果文件很大的話,我們經常會見到Internet Explorer顯示 "The page cannot be displayed - Cannot find server or DNS Error",好像是怎么也catch不了這個錯誤。為什么?因為這是個client side錯誤,server side端的Application_Error是處理不到的,可以參考這個帖子研究一下產生這個錯誤的機理。

handling server error when upload file too large

解決的方法是利用隱含的HttpWorkerRequest,用它的GetPreloadedEntityBody 和 ReadEntityBody方法從IIS為ASP.NET建立的pipe里分塊讀取數據

IServiceProvider provider = (IServiceProvider) HttpContext.Current;
HttpWorkerRequest wr = (HttpWorkerRequest) provider.GetService(typeof(HttpWorkerRequest));
byte[] bs = wr.GetPreloadedEntityBody();
....
if (!wr.IsEntireEntityBodyIsPreloaded())
{
        int n = 1024;
        byte[] bs2 = new byte[n];
        while (wr.ReadEntityBody(bs2,n) >0)
       {
             .....
        }
}

三、IIS中上傳大小的修改

1、首先要到進程中把IIS服務關了,即把inetinfo.exe進程關了,不然里面的文件不給你更改的喲~~~
    2、在系統目錄中找到:windows/system32/inesrv/metabase.xml”文件,找個文本編輯器打開他,我都用EditPuls(這家伙不錯,帶字體色彩的),Ctrl+F 找到AspMaxRequestEntityAllowed="204800"這一項,這就是iis上傳文件的默認大小了,默認為204800Byte,也就是200KB,將它改為你需要的大小就可以了!

 

第二種方式,主要是針對於iis7.0版本

 

1. 在用戶自己的asp.net應用中修改web config文件,增加或修改以下紅色背景內容即可

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

2. 打開C:/Windows/System32/inetsrv/config/schema/IIS_schema.xml,找到如下內容:

程序代碼
<element name="requestLimits">
   <attribute name="maxAllowedContentLength" type="uint" defaultValue="30000000" />
   <attribute name="maxUrl" type="uint" defaultValue="4096" />
   <attribute name="maxQueryString" type="uint" defaultValue="2048" />
   <element name="headerLimits">
     <collection addElement="add" clearElement="clear" removeElement="remove" >
       <attribute name="header" type="string" required="true" isUniqueKey="true" validationType="nonEmptyString" />
       <attribute name="sizeLimit" type="uint" required="true" />
     </collection>
   </element>
</element>


將紅色部分修改成合適大小即可[1],單位為字節。

說明

[1].IIS_schema.xml默認是無法修改的,即使是系統管理員也無法修改,必需修改下權限,再去掉其只讀屬性才可修改。



上圖為IIS_schema.xml默認權限,直接點擊"編輯"按鈕你會發現權限是不能修改的,還得先做如下操作:
1).點擊"高級"按鈕進入高級安全設置界面;
2).切換到"所有者"選項卡,點"編輯"按鈕,選中Administrators后確定;

現在可以在"安全"選項卡上點擊"編輯"按鈕,給Administrators增加修改和寫入權限了,再去掉IIS_schema.xml只讀屬性,系統管理員就可以修改文件了。

 

 

原文:http://blog.sina.com.cn/s/blog_7ae9d7b901014fgi.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM