2010-04-16 138 views
0

我有一個帶有多個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); 
} 
+0

嘗試刪除/從現在保存的位置移動文件並再次上傳。在這種情況下,錯誤是否仍然存在? – shahkalpesh 2010-04-16 18:38:35

+0

我只是再次瀏覽代碼......當FileUpload控件之一沒有路徑時發生錯誤。它仍然創建一個HttpPostedFile的實例,但ContentLength爲0,FileName爲空。衛生署! – jrummell 2010-04-16 19:26:33

回答

1

我通過檢查非零的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); 
} 

有時它簡單的事情,我忽略...

1

有意思......我的第一個問題是,你絕對肯定這確實是線拋出異常的代碼?

兩個......如果您(暫時)授予每個人訪問該路徑的權限,它會消失嗎?

您現在的權限設置如何?什麼用戶正在運行ASP.NET?你在使用模擬嗎?

2

嘗試使用

file.SaveAs(server.mappath(saveAsPath));

相關問題