最近在做文件上傳的功能,遇到一些問題,記錄如下,以備以后使用。
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); }
以上為本次上傳功能中遇到的問題,以后上傳相關的問題還會繼續記錄在本文中,如有錯誤之處,請大家指正。