解决ASP.NET上传文件大小限制
第一種方法,主要適用于IIS6.0版本
?
一、修改配置Web.Config文件中的httpRuntime節(jié)點(diǎn)
對于asp.net,默認(rèn)只允許上傳4M文件,增加如下配置,一般可以自定義最大文件大小.
一、修改配置Web.Config文件中的httpRuntime節(jié)點(diǎn)
對于asp.net,默認(rèn)只允許上傳4M文件,增加如下配置,一般可以自定義最大文件大小.
<httpRuntime
executionTimeout="800"
maxRequestLength="40960"
useFullyQualifiedRedirectUrl="false"/>
//executionTimeout預(yù)設(shè)(即默認(rèn))是 90 秒
//可以修改:executionTimeout = "180"
Asp.net支持的最大上傳文件大小
?
在web.config中配置:
?
配置 ASP.NET HTTP 運(yùn)行庫設(shè)置。該節(jié)可以在計(jì)算機(jī)、站點(diǎn)、應(yīng)用程序和子目錄級別聲明。
<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"/>
可選屬性
屬性 選項(xiàng) 說明
useFullyQualifiedRedirectUrl:指示客戶端重定向是否是完全限定的(采用 {HYPERLINK "http://server/path" } 格式,這是某些移動(dòng)控件所必需的),或者指示是否代之以將相對重定向發(fā)送到客戶端。
????true 指定客戶端重定向需要以完全限定的格式發(fā)送。這是通過自動(dòng)將不是完全限定的格式的所有重定向轉(zhuǎn)換為完全限定的格式來實(shí)現(xiàn)的。
????false 指定客戶端重定向不需要被自動(dòng)轉(zhuǎn)換為完全限定格式。false 是默認(rèn)選項(xiàng)。
maxRequestLength:指示 ASP.NET 支持的最大文件上載大小。該限制可用于防止因用戶將大量文件傳遞到該服務(wù)器而導(dǎo)致的拒絕服務(wù)攻擊。指定的大小以 KB 為單位。默認(rèn)值為 4096 KB (4 MB)。
executionTimeout:指示在被 ASP.NET 自動(dòng)關(guān)閉前,允許執(zhí)行請求的最大秒數(shù)。
minFreeThreads:允許執(zhí)行新請求的自由線程的最小數(shù)目。ASP.NET 為要求附加線程來完成其處理的請求使這些線程保持自由狀態(tài)。
minFreeLocalRequestFreeThreads:ASP.NET 保持的允許執(zhí)行新的本地請求的自由線程的最小數(shù)目。該線程數(shù)目是為從本地主機(jī)傳入的請求而保留的,以防某些請求在其處理期間發(fā)出對本地主機(jī)的子請求。這避免了可能的因遞歸重新進(jìn)入 Web 服務(wù)器而導(dǎo)致的死鎖。
appRequestQueueLimit:ASP.NET 將為應(yīng)用程序排隊(duì)的請求的最大數(shù)目。當(dāng)沒有足夠的自由線程來處理請求時(shí),將對請求進(jìn)行排隊(duì)。當(dāng)隊(duì)列超出了該設(shè)置中指定的限制時(shí),將通過“503 - 服務(wù)器太忙”錯(cuò)誤信息拒絕傳入的請求。
versionHeader:指定 ASP.NET 隨每個(gè)響應(yīng)所發(fā)送的版本頭的值。Microsoft Visual Studio .NET 使用該屬性來確定當(dāng)前使用的 ASP.NET 版本。這對產(chǎn)品環(huán)境來說不是必需的,并且可以通過從 Web.config 或 Machine.config 移除該屬性,或?qū)⒃搶傩栽O(shè)置為空字符串 (versionHeader="") 來將其禁用。
?
示例
以下示例為 ASP.NET 應(yīng)用程序指定 HTTP 運(yùn)行時(shí)參數(shù)。
<configuration>
???<system.web>
??????<httpRuntime maxRequestLength="4000"
?????????useFullyQualifiedRedirectUrl="true"
?????????executionTimeout="45"
?????????versionHeader="1.1.4128"/>
???</system.web>
</configuration>
?
二、如果還不行,可以使用思?xì)w提供的方案:
我們在上傳大文件時(shí)都遇到過這樣或那樣的問題。設(shè)置很大的maxRequestLength值并不能完全解決問題,因?yàn)锳SP.NET會(huì)block直到把整個(gè)文件載入內(nèi)存后,再加以處理。實(shí)際上,如果文件很大的話,我們經(jīng)常會(huì)見到Internet Explorer顯示 "The page cannot be displayed - Cannot find server or DNS Error",好像是怎么也catch不了這個(gè)錯(cuò)誤。為什么?因?yàn)檫@是個(gè)client side錯(cuò)誤,server side端的Application_Error是處理不到的,可以參考這個(gè)帖子研究一下產(chǎn)生這個(gè)錯(cuò)誤的機(jī)理。
handling server error when upload file too large
解決的方法是利用隱含的HttpWorkerRequest,用它的GetPreloadedEntityBody 和 ReadEntityBody方法從IIS為ASP.NET建立的pipe里分塊讀取數(shù)據(jù)
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、首先要到進(jìn)程中把IIS服務(wù)關(guān)了,即把inetinfo.exe進(jìn)程關(guān)了,不然里面的文件不給你更改的喲~~~
????2、在系統(tǒng)目錄中找到:windows/system32/inesrv/metabase.xml”文件,找個(gè)文本編輯器打開他,我都用EditPuls(這家伙不錯(cuò),帶字體色彩的),Ctrl+F 找到AspMaxRequestEntityAllowed="204800"這一項(xiàng),這就是iis上傳文件的默認(rèn)大小了,默認(rèn)為204800Byte,也就是200KB,將它改為你需要的大小就可以了!
?
第二種方式,主要是針對于iis7.0版本
?
1. 在用戶自己的asp.net應(yīng)用中修改web config文件,增加或修改以下紅色背景內(nèi)容即可
?<system.webServer>
????<security>
??????<requestFiltering>
????????<requestLimits maxAllowedContentLength="262144000"></requestLimits>
??????</requestFiltering>
????</security>
?
2. 打開C:/Windows/System32/inetsrv/config/schema/IIS_schema.xml,找到如下內(nèi)容:
程序代碼 <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],單位為字節(jié)。
說明
[1].IIS_schema.xml默認(rèn)是無法修改的,即使是系統(tǒng)管理員也無法修改,必需修改下權(quán)限,再去掉其只讀屬性才可修改。
上圖為IIS_schema.xml默認(rèn)權(quán)限,直接點(diǎn)擊"編輯"按鈕你會(huì)發(fā)現(xiàn)權(quán)限是不能修改的,還得先做如下操作:
1).點(diǎn)擊"高級"按鈕進(jìn)入高級安全設(shè)置界面;
2).切換到"所有者"選項(xiàng)卡,點(diǎn)"編輯"按鈕,選中Administrators后確定;
現(xiàn)在可以在"安全"選項(xiàng)卡上點(diǎn)擊"編輯"按鈕,給Administrators增加修改和寫入權(quán)限了,再去掉IIS_schema.xml只讀屬性,系統(tǒng)管理員就可以修改文件了。??
?
以上兩種方式都是我在網(wǎng)上各種博客中搜集到的,是比較有效的方法。之前這個(gè)文件上傳大小限制的問題,也糾結(jié)了好久,現(xiàn)在終于解決了,各種開心。現(xiàn)在把這些貼到博客里面來,希望能給大家一個(gè)幫助,也是給我留下痕跡,哈哈!
?
?
轉(zhuǎn):http://blog.sina.com.cn/s/blog_7ae9d7b901014fgi.html
轉(zhuǎn)載于:https://www.cnblogs.com/mvv118/p/3906651.html
總結(jié)
以上是生活随笔為你收集整理的解决ASP.NET上传文件大小限制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: System.setProperty()
- 下一篇: 各种框架实现了经典的 todo 应用