我有一個帶有多個FileUpload
控件和一個上傳按鈕的aspx頁面。在單擊處理我保存的文件是這樣的:即使文件已保存,HttpPostedFile.SaveAs()也會拋出UnauthorizedAccessException?
string path = "...";
for (int i = 0; i < Request.Files.Count - 1; i++)
{
HttpPostedFile file = Request.Files[i];
string fileName = Path.GetFileName(file.FileName);
string saveAsPath = Path.Combine(path, fileName);
file.SaveAs(saveAsPath);
}
當file.SaveAs()
被調用時,它拋出:
System.Web.HttpUnhandledException: 異常類型 'System.Web.HttpUnhandledException' 的拋出了 。 ---> System.UnauthorizedAccessException: 訪問路徑 '...' 被拒絕。在 System.IO .__ Error.WinIOError(的Int32 的errorCode,字符串maybeFullPath)在 System.IO.FileStream.Init(字符串路徑, 的FileMode模式,FileAccess的訪問, 的Int32權利,布爾useRights, 文件共享份額,緩衝區大小的Int32 , FileOptions選項, SECURITY_ATTRIBUTES secAttrs,字符串 MSGPATH,布爾bFromProxy)在 System.IO.FileStream..ctor(字符串 路徑,的FileMode模式,FileAccess的 訪問,文件共享份額,的Int32 BUFFERSIZE,FileOptions選項, 字符串msgPath,Boolean bFromProxy)
at System.IO.FileStr eam..ctor(字符串 路徑,的FileMode模式)在 System.Web.HttpPostedFile.SaveAs(字符串 文件名)在 Belden.Web.Intranet.Iso.Complaints.AttachmentUploader.btnUpload_Click(對象 發件人,EventArgs e)上 System.Web.UI.WebControls.Button.OnClick在 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl在 System.Web.UI.WebControls.Button.RaisePostBackEvent(字符串 eventArgument)(EventArgs的 E) ,String eventArgument)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)--- 內部異常堆棧跟蹤的結尾--- 在 System.Web.UI.Page.HandleError(例外 e)上 System.Web.UI.Page.ProcessRequestMain(布爾 includeStagesBeforeAsyncPoint,布爾 includeStagesAfterAsyncPoint)處 System.Web.UI.Page.ProcessRequest()
System.Web.UI.Page.ProcessRequest(布爾 includeStagesBeforeAsyncPoint,布爾 includeStagesAfterAsyncPoint)在 System.Web.UI.Page.ProcessRequest( HttpContext context)at ASP.departments_ iso_complaints_uploadfiles_aspx.ProcessRequest(HttpContext的 上下文)在 System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在 System.Web.HttpApplication.ExecuteStep(IExecutionStep 步驟,布爾& completedSynchronously)
現在,這裏有趣的部分。該文件保存正確!那麼爲什麼它拋出這個異常呢?
更新
我通過檢查非零的ContentLength固定它:
string path = "...";
for (int i = 0; i < Request.Files.Count - 1; i++)
{
HttpPostedFile file = Request.Files[i];
if (file.ContentLength == 0)
{
continue;
}
string fileName = Path.GetFileName(file.FileName);
string saveAsPath = Path.Combine(path, fileName);
file.SaveAs(saveAsPath);
}
嘗試刪除/從現在保存的位置移動文件並再次上傳。在這種情況下,錯誤是否仍然存在? – shahkalpesh 2010-04-16 18:38:35
我只是再次瀏覽代碼......當FileUpload控件之一沒有路徑時發生錯誤。它仍然創建一個HttpPostedFile的實例,但ContentLength爲0,FileName爲空。衛生署! – jrummell 2010-04-16 19:26:33