最近在做檔案上傳的功能,遇到一些問題,記錄如下,以備以後使用。
1.HTTP Error 404.13 - Not Found,請求篩選子產品被配置為拒絕超過請求内容長度的請求。
IIS預設允許請求長度為4M,對于圖檔檔案來說足夠使用,但對于附件來說,這個限制就明顯不夠用了,需要在配置檔案中加入一些設定。
<configuration>
<system.web>
<!--最大請求長度,機關byte,目前限制為1G,逾時時間機關為秒,目前時間為1小時-->
<httpRuntime requestValidationMode="2.0" maxRequestLength="1073741824" executionTimeout="3600"/>
</system.web>
<system.webServer>
<security>
<requestFiltering>
<!--最大允許請求長度,機關byte,目前限制為1G-->
<requestLimits maxAllowedContentLength="1073741824"></requestLimits>
</requestFiltering>
</security>
</system.webServer>
</configuration>
2.ASP.NET逾時時間已到。
asp.net在預設情況下,逾時時間為90秒,如果90秒内該請求還未有完成,就會傳回逾時的錯誤。
要在配置檔案中設定逾時時間即可,參考上面httpRuntime節點中executionTimeout的設定。
3.設定IIS配置(與設定配置檔案等效)
*打開IIS,選擇需要操作的站點,輕按兩下右側ASP,找到限制屬性,設定腳本逾時為60分鐘
*相應緩沖限制和最大請求實體主體限制都設定為1G(機關byte):1073741824,點選右側應用
*選擇站點,輕按兩下右側配置編輯器,找到system.web節點下的httpRuntime,設定maxRequestLength為1073741824,應用
*再選擇system.webServer>security>requestFiltering,找到requestLimits,設定maxAllowedContentLength值為1073741824,應用
4.由于本次上傳采用的是WebService的方式,上傳完成後提示操作逾時,于是給ws設定了逾時時間
WebService ws = new WebService();
ws.Timeout = 3600000; /*機關毫秒,1小時*/
5.使用IE和Chrome浏覽器測試,擷取上傳檔案名時遇到一個問題
以前擷取檔案名直接使用files[0],用IE浏覽器調試時發現這樣擷取到的名字帶有F://xxx/這樣的盤符路徑,是以采用如下方式擷取檔案名。
HttpFileCollection files = context.Request.Files;
if (files.Count > 0)
{
/*擷取真實檔案名,files[0].FileName這種方法在IE浏覽器中上傳會帶有F://路徑*/
string filename = System.IO.Path.GetFileName(files[0].FileName);
}
以上為本次上傳功能中遇到的問題,以後上傳相關的問題還會繼續記錄在本文中,如有錯誤之處,請大家指正。