asp.net 甚至上傳文件大小或者服務器設置上傳文件大小

 1. ASP.Net在web.config中設置上傳文件的大小方法

修改Webcong文件:
<system.web>
<httpRuntime maxRequestLength="40960"   //即40MB,1KB=1024
useFullyQualifiedRedirectUrl="true"
executionTimeout="6000"
useFullyQualifiedRedirectUrl="false"
minFreeThreads="8"
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100"
enableVersionHeader="true"
/>
</system.web>
其中與上傳有密切關係的是:
如果服務器內存512M,已可上傳大小160M的文件。
WebConfig配置連接超時
<!--
  executionTimeout="90" 改爲 executionTimeout="720" by wp 2007.9.4 executionTimeout表示允許執行請求的最大時間限制,單位爲秒
        maxRequestLength:指示 ASP.NET 支持的最大文件上載大小。指定的大小以 KB 爲單位。默認值爲 4096 KB (4 MB)。
        -->
        <httpRuntime executionTimeout="720" maxRequestLength="65536" useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" enableVersionHeader="true"/>

<!--
httpRuntime是配置asp.net http運行時設置,以確定如何處理對asp.net應用程序的請求。
    executionTimeout:表示允許執行請求的最大時間限制,單位爲秒
     maxRequestLength:指示 ASP.NET 支持的最大文件上載大小。該限制可用於防止因用戶將大量文件傳遞到該服務器而導致的拒絕服務攻擊。指定的大小以 KB 爲單位。默認值爲 4096 KB (4 MB)。
     useFullyQualifiedRedirectUrl:表示指示客戶端重定向是否是完全限定的(採用 "http://server/path" 格式,這是某些移動控件所必需的),或者指示是否代之以將相對重定向發送到客戶端。如果爲 True,則所有不是完全限定的重定向都將自動轉換爲完全限定的格式。false 是默認選項。
     minFreeThreads:表示指定允許執行新請求的自由線程的最小數目。ASP.NET 爲要求附加線程來完成其處理的請求而使指定數目的線程保持自由狀態。默認值爲 8。
    minLocalRequestFreeThreads:表示ASP.NET 保持的允許執行新本地請求的自由線程的最小數目。該線程數目是爲從本地主機傳入的請求而保留的,以防某些請求在其處理期間發出對本地主機的子請求。這避免了可能的因遞歸重新進入 Web 服務器而導致的死鎖。
    appRequestQueueLimit:表示ASP.NET 將爲應用程序排隊的請求的最大數目。當沒有足夠的自由線程來處理請求時,將對請求進行排隊。當隊列超出了該設置中指定的限制時,將通過“503 - 服務器太忙”錯誤信息拒絕傳入的請求。
    enableVersionHeader:表示指定 ASP.NET 是否應輸出版本標頭。Microsoft Visual Studio 2005 使用該屬性來確定當前使用的 ASP.NET 版本。對於生產環境,該屬性不是必需的,可以禁用。
到這裏web.config的設置就已經結束。
可是一旦上傳文件的大小超過了這個設置的文件大小範圍就會發生如下錯誤:
該頁無法顯示
您要查看的頁當前不可用。網站可能遇到技術問題,或者您需要調整瀏覽器設置。
雖然解決不了,那也要捕獲這個錯誤啊!怎麼辦呢?
最近吃了幾條魚,想了想,由於這個錯誤是由file控件引發的前臺錯誤,所以在後臺想利用try...catch來捕獲是行不通的。
於是想到了利用.NET的錯誤捕獲頁面的機制來處理。可行哦。
1、先設置web.config
<customErrors mode="On"/>
2、新建一個error.aspx 文件,專門用來捕獲錯誤的。
3、在上傳文件的aspx頁面的前臺頁面裏添加page指令。ErrorPage="UploadError.aspx"
4、在error.aspx中添加一些代碼來判斷錯誤信息是否是file引起的前臺錯誤。
public class UploadError : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
Exception ex = Server.GetLastError();
if (ex != null)
{
Response.Redirect("../error.aspx");
}
else //前臺錯誤ex爲空值
{
Response.Redirect("uploadexcel.aspx?err=1"); //重新跳轉到上傳頁面,加上err參數是爲了顯示錯誤信息
}
}
5、顯示錯誤提示。
public class uploadexcel : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
if (Request["err"] == "1")
{
Page.RegisterStartupScript("budget","<script language = javascript>alert('Upload file has failed ! File size is too large !')</script>");
}
}
}

缺點:文件太大可能達不到你的要求的。比如你想要限到30M.但你會發現。上傳20M時就出錯了。因爲IIS那裏就會認爲你進行OS攻擊了。把你的頁面給喀嚓了。這樣子頁面就會有問題。所以最好的方法是在客戶端用JS進行驗證。
web.config配置方法:
maxRequestLength的單位是KB
<?xml   version= "1.0 "   encoding= "utf-8 "   ?>
<configuration>
    <system.web>
        <httpRuntime  
            maxRequestLength= "1048576 "   //最大長度
            executionTimeout= "3600 "   //最大響應時間。
        />
    </system.web>
</configuration>

2 . 默認上傳文件大小和大小限制的問題

 

一、解決服務器的默認上傳文件大小的問題:
1、修改“允許直接編輯配置數據庫”爲勾選狀態;

2、在服務裏關閉iis admin service服務
會提示
World Wide Web Publishing Service
HTTP SSL
這兩個也會停止。(記得:改完後需要手動啓動這兩個服務!)
3、找到windows\system32\inesrv\下的metabase.xml編輯其中的ASPMaxRequestEntityAllowed 把他修改爲需要的值,默認爲204800,即200K 改成你需要的值。
4、這裏需要注意一點就是要使用然後重啓iis admin service服務

注意:
notepad.exe也就是要使用記事本修改
不要用WordPad.exe寫字板修改否則會出現錯誤。
導致IIS服務不能啓動!

二、解決服務器下載大小限制的問題
在 IIS 6.0 中,無法下載超過4M的附件時,可以按以下步驟解決:
1、先在服務裏關閉 iis admin service 服務。
2、找到 windowssystem32inetsrv 下的 metabase.xml 文件。
3、用純文本方式打開,找到 AspBufferingLimit 把它修改爲需要的值(可修改爲20M即:20480000)。
4、存盤,然後重啓 iis admin service 服務。

 

發佈了33 篇原創文章 · 獲贊 10 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章