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>