ASP.NET MVC 3:支持HTML5多文件上传?

时间:2012-01-09 00:17:13

标签: asp.net-mvc html5

我可以使用:

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

并将其绑定到:

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

我正在为现代浏览器编写一个Web应用程序,不必担心IE,所以我想避免使用Flash。当我发布表单时,现在files始终为空。有没有办法让它在MVC 3中运行?

谢谢!

4 个答案:

答案 0 :(得分:13)

您的表单中是否正确设置了编码?

我相信你还需要:

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

在表单声明中,以确保浏览器可以发布文件。

例如:

@using (Html.BeginForm("action", "controller", FormMethod.Post, new { enctype = "multipart/form-data" }))

答案 1 :(得分:1)

不会使用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");
}

答案 2 :(得分:0)

我的索引视图:

    @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");
        }   

文件包含上传的文件 - 对我来说很好用!

答案 3 :(得分:0)

这不起作用:

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

应该这样做:

for (int i=0; i<Request.Files.Count; i++)
{
  HttpPostedFileBase UpoadedFile = Request.Files[i];
}