ASP.NET MVC 3: поддержка загрузки нескольких файлов HTML5? - PullRequest
6 голосов
/ 09 января 2012

Могу ли я использовать:

<input type="file" name="files" id="files" multiple="multiple" />

и связать его с:

[HttpPost]
public ActionResult Upload(IEnumerable<HttpPostedFileBase> files)
{
    ...
}

Я пишу веб-приложение для современных браузеров, и мне не нужно так беспокоиться об IEЯ хотел бы избежать использования Flash.Прямо сейчас files всегда пусто, когда я публикую форму.Есть ли способ заставить это работать в MVC 3?

Спасибо!

Ответы [ 4 ]

13 голосов
/ 09 января 2012

Правильно ли установлена ​​кодировка в вашей форме?

Мне кажется, вам все еще нужно:

new { enctype = "multipart/form-data" }

В объявлении формы, чтобы браузер мог публиковать файлы.

Например:

@using (Html.BeginForm("action", "controller", FormMethod.Post, new { enctype = "multipart/form-data" }))
1 голос
/ 09 января 2012

Разве нельзя использовать Request.Files для обратной совместимости следующим образом:

public ActionResult UploadFiles()
{
  string UpoadedFilesFolder = "YourServerFolder";
  string fileName ="";
  byte[] fileData=null;
  foreach (HttpPostedFileBase uf in Request.Files)
  {
    HttpPostedFileBase UpoadedFile = uf;
    if (uf.ContentLength > 0)
    {
      fileName = Path.GetFileName(UpoadedFile.FileName);
      using (BinaryReader br = new BinaryReader(UpoadedFile.InputStream))
      {
        fileData = br.ReadBytes((int)UpoadedFile.InputStream.Length);
      }
      using (FileStream fs = new FileStream(Path.Combine(System.Web.Hosting.HostingEnvironment.MapPath(UpoadedFilesFolder), fi.FileName), FileMode.Create))
      {
        fs.Write(fileData, 0, fileData.Length);
      }
    }
  }
  return Content("OK");
}
0 голосов
/ 04 июля 2013

Это не сработает:

foreach (HttpPostedFileBase uf in Request.Files)
{
    HttpPostedFileBase UpoadedFile = uf;
}

Должно быть так:

for (int i=0; i<Request.Files.Count; i++)
{
  HttpPostedFileBase UpoadedFile = Request.Files[i];
}
0 голосов
/ 09 января 2012

My Index View:

    @using (Html.BeginForm("Upload","home", FormMethod.Post,new { enctype = "multipart/form-data" }))
{
    <input type="file" name="files" value=" " multiple="multiple" />
    <input type="submit" name="btUpload" value="Upload" />
}   

В контроллере

public ActionResult Upload(HttpPostedFileBase[] files)
        {
            TempData["Message"] = files.Count();
            return RedirectToAction("Index");
        }   

И файлы содержат загруженные файлы - отлично работает для меня!

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