Загрузка файлов с помощью ASP.Net MVC - получить имя, но нет потока файлов, что я делаю не так? - PullRequest
41 голосов
/ 18 ноября 2008

У меня есть эта форма на мой взгляд:

<!-- Bug (extra 'i') right here-----------v  -->
<!-- was: <form method="post" enctype="mulitipart/form-data" action="/Task/SaveFile"> -->
<form method="post" enctype="multipart/form-data" action="/Task/SaveFile">
<input type="file" id="FileBlob" name="FileBlob"/>
<input type="submit"  value="Save"/>
<input type="button" value="Cancel" onclick="window.location.href='/'" />
</form>

И этот код в моем контроллере:

public ActionResult SaveFile( FormCollection forms )
{
   bool errors = false;
   //this field is never empty, it contains the selected filename
   if ( string.IsNullOrEmpty( forms["FileBlob"] ) )
   {
       errors = true;
       ModelState.AddModelError( "FileBlob", "Please upload a file" );
   }
   else
   {
      string sFileName = forms["FileBlob"];
      var file = Request.Files["FileBlob"];
      //'file' is always null, and Request.Files.Count is always 0 ???
      if ( file != null )
      {
         byte[] buf = new byte[file.ContentLength];
         file.InputStream.Read( buf, 0, file.ContentLength );
         //do stuff with the bytes
      }
      else
      {
         errors = true;
         ModelState.AddModelError( "FileBlob", "Please upload a file" );
      }
   }
   if ( errors )
   {
      return ShowTheFormAgainResult(); 
   }
   else
   {
      return View();
   }
}

Исходя из каждого примера кода, который мне удалось найти, это похоже на способ сделать это. Я пробовал с маленькими и большими файлами, без разницы в результате. Поле формы всегда содержит имя файла, которое совпадает с тем, что я выбрал, а коллекция Request.Files всегда пуста.

Не думаю, что это актуально, но я использую веб-сервер разработки VS. AFAIK поддерживает загрузку файлов так же, как IIS.

Уже поздно, и есть шанс, что я упускаю что-то очевидное. Буду благодарен за любой совет.

Ответы [ 4 ]

50 голосов
/ 18 ноября 2008

Я не знаю, какова политика публикации ненормативной лексики, но вот проблема:

enctype="mulitipart/form-data"

Дополнительные i не позволили загрузить файл. Пришлось запустить Fiddler, чтобы убедиться, что он никогда не отправлял файл.

Следует читать:

enctype="multipart/form-data"
16 голосов
/ 10 декабря 2009

Для людей, которые могут наткнуться на этот пост в будущем, вот отличная статья Скотта Хансельмана на эту тему: Назад к основам Пример из практики: Реализация загрузки файлов HTTP с ASP.NET MVC, включая тесты и тесты

2 голосов
/ 18 ноября 2008
var file = Request.Files[sFileName];

должно быть ...

var file = Request.Files["FileBlob"];

при этом Request.Files.Count должно быть 1 ... хммм

0 голосов
/ 18 ноября 2008

Хорошо, что вы нашли свою ошибку.

В качестве примечания вы захотите попробовать / поймать код обработки файлов, чтобы вы знали, когда права доступа к файлам и т. Д. Установлены неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...