2014-01-21 80 views
1

我有一個ASP.NET MVC應用程序,我想添加文件上傳功能。 這是我的處理程序:DirectoryNotFoundException當使用SaveAs(FileUpload)

private void UploadWholeFile(HttpContext context, List<FilesStatus> statuses) 
    { 
     for (int i = 0; i < context.Request.Files.Count; i++) 
     { 
      var file = context.Request.Files[i]; 

      var fullPath = Path.Combine(System.Web.HttpContext.Current.Server.MapPath("~/App_data/UploadedFiles/")) + Path.GetFileName(file.FileName); 

      file.SaveAs(fullPath); 

      string fullName = Path.GetFileName(file.FileName); 
      statuses.Add(new FilesStatus(fullName, file.ContentLength, fullPath)); 
     } 
    } 

當我測試(本地),我總是得到這個錯誤:DirectoryNotFoundException:找不到路徑的一部分.....

奇怪的是:我在測試後在UploadedFiles文件夾中找到了該文件! 那麼,爲什麼我會得到這個錯誤?

+0

哪行代碼顯示異常? – iJade

+0

另存爲不會創建新的目錄。所以如果你有App_data並且沒有UploadedFiles,你會得到這個異常。首先檢查是否存在UploadedFiles。 – Rayet

+0

file.SaveAs(fullPath)發出異常,並且UploadedFiles文件夾確實存在,我甚至可以在測試後找到它中的文件... – Sam

回答

1

好了,發現自己是什麼錯誤:選擇要上傳的文件後,該形式已經提交,導致上傳的文件。 按下我的「上傳」按鈕後,試圖再次上傳文件。

因此,該錯誤消息試圖告訴我,該目錄中已經有一個具有相同名稱的文件!

0

註釋掉這些代碼行。其中之一是造成你的錯誤。

string fullName = Path.GetFileName(file.FileName); 
statuses.Add(new FilesStatus(fullName, file.ContentLength, fullPath)); 
+0

file.SaveAs(fullPath);給出了錯誤 – Sam

0

試試這個,

private void UploadWholeFile(HttpContext context, List<FilesStatus> statuses) 
{ 
    string path = HttpContext.Current.Server.MapPath("~/App_data/UploadedFiles/"); 

    for (int i = 0; i < context.Request.Files.Count; i++) 
    { 
     var file = context.Request.Files[i]; 
     file.SaveAs(path + file.FileName); 

     ... 
    } 
} 
+0

當我嘗試你的建議時,我得到以下錯誤(HttpException):.../App_data/UploadedFiles/test.jpg'是一個物理路徑,但是預計有虛擬路徑。 – Sam

相關問題