2014-01-21 4 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: Не удалось найти часть пути .....

Странная вещь is: Я нашел файл в папке UploadedFiles после теста! Так почему я получаю эту ошибку?

+0

какая строка кода дает исключение? – iJade

+0

SaveAs не создает новые каталоги. Поэтому, если у вас есть 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

Смежные вопросы