如何在单个帖子中接收控制器中的所有上传文件,例如在列表中立刻<>?

时间:2012-04-06 03:41:49

标签: asp.net-mvc-3 uploadify

我在使用MVC 3中的Uploadify上传多个文件时遇到了麻烦。 我选择3个文件并通过ajax发布。我得到控制器中的文件,但有一个问题。 我没有在一个帖子中获得3个文件,而是看到控制器被3个文件命中3次。

我希望控制器中的所有3个文件都可以在一个帖子中使用。

这可能吗?

[HttpPost]
public ActionResult UploadFiles()
{
   //This always shows one file i debug mode
   foreach (string fileName in Request.Files)
   {

   }
}

我想一次性处理文件并一次保存。

1 个答案:

答案 0 :(得分:2)

如果您想要在您使用的文件上传多个文件,请不要知道Uploadify,但要使用标准格式:

查看:

@using (Html.BeginForm("YourAction","YourController",FormMethod.Post,new { enctype="multipart/form-data"})) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Message</legend>           
         //your html here

          //as many input types you would like but they 
         //must have a same name attribute (files) 
          <input type="file" name="files"/> 
    </fieldset>

控制器:

[HttpPost]
public ActionResult YourAction(FormCollection values, IEnumerable<HttpPostedFileBase> files)
{
    //do what you want with form values then for files
    foreach (var file in files)
    {
      if (file.ContentLength > 0)
      {
         byte[] fileData = new byte[file.ContentLength];
         file.InputStream.Read(fileData, 0, file.ContentLength);
         //do what you want with fileData
       }
     }
}

因此,您将IEnumerable<HttpPostedFileBase> files用于多个文件,HttpPostedFileBase file用于单个文件,您可以将视图中的输入更改为

<input type="file" name="file"/>

问候。