1>今天一個朋友問一個問題:
為什麼在用File控制項讀取圖片、文件、等文件路徑的時候沒錯誤,而在讀取影片檔(如rmvb等)出現該頁無法顯示錯誤。
其程式碼片段如下:
private void btnUpFiles_Click(object sender, System.EventArgs e)
{
string pathName=this.File1.PostedFile.FileName.ToString();
Response.Write(pathName);
}
2>著手解決問題:
我以為是取路徑字串的問題,所以就先截取路徑和檔名,再截取檔案的後綴名,分別儲存為字串,但始終有錯。其程式碼片段如下:
string fullname=this.File1.PostedFile.FileName.ToString();//取全路徑
string firstname=fullname.Substring(0,fullname.LastIndexOf(".")+1);//取路徑和檔名,去掉檔案的後綴名
Session["firstname"]=firstname;//儲存在一個session中
char [] spliter={'.'};//用來分割字串的分割符
string [] fileName=this.File1.PostedFile.FileName.Split(spliter);//把全路徑分割後的每一部分保存在數組中
Session["lastname"]=fileName[fileName.Length-1];//把數組中的最後一個元素(即後綴名)存為一個session
Response.Redirect("test.aspx");//我想傳到這個頁面測試。
以上方法依然出錯,錯誤原因好像根本與字串無關。
3>網友「@@」提示是httpRuntime問題(謝謝他):
問題解決方法:在web.config中的<system.web></system.web>內加入以下程式碼:
<httpRuntime executionTimeout="600" maxRequestLength="951200"
useFullyQualifiedRedirectUrl="true" minFreeThreads="8"
minLocalRequestFreeThreads="4" appRequestQueueLimit="100" enableVersionHeader="true"/>
4>來自MSDN解釋:
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 版本。對於生產環境,該屬性不是必需的,可以停用。