【问题标题】:How to implement multiple files selection and upload using HttpFileCollectionBase in ASP.NET MVC3?如何在 ASP.NET MVC3 中使用 HttpFileCollectionBase 实现多文件选择和上传?
【发布时间】:2013-03-18 15:05:01
【问题描述】:

我已经使用PLUpload 框架实现了多文件选择。

可以将控制器中的Request.Files 传递给模型(将处理文件)?

我知道Request.Files 会自动从页面中获取所有input type='file' 标记。

需要采取什么解决方法?

我不想在提交表单之前上传文件。我希望在提交表单时继续上传。

示例:选择两个文件后,我在 HTML 代码中有以下标记:

<div id="filelist">
  <div id="p17lu3r33g14jk1dg31u0dg1l1lll3">test.xml (272 KB) <b></b></div>
  <div id="p17lu3r33h9mt2oiel81l5t17iq4">abcde.xml (272 KB) <b></b></div>
</div>

以及上传表单的 HTML 代码:

<div id="upload-container">
   <div>
      <a id="pickfiles" href="#">Select files</a>      
      <a id="uploadfiles" href="#">Upload selected files</a>
   </div>
   <div>
      <div id="filelist">
      </div>
   </div>
</div>

【问题讨论】:

  • 是的,你可以。 gofor 列表

标签: c# asp.net-mvc-3


【解决方案1】:

假设文件输入的名称例如是files,您可以执行以下控制器操作:

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

或者定义一个视图模型:

public class MyViewModel
{
    public IEnumerable<HttpPostedFileBase> Files { get; set; }
}

然后:

[HttpPost]
public ActionResult Upload(MyViewModel model)
{
    ....
}

再一次重要的是让文件输入命名相同。例如:

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

更新:

您似乎想使用PLUpload 插件。该插件单独发送每个文件并使用块。下面是一个如何在服务器上处理上传的示例:

[HttpPost]
public ActionResult Upload(int? chunk, string name)
{
    var fileUpload = Request.Files[0];
    var uploadPath = Server.MapPath("~/App_Data");
    chunk = chunk ?? 0;
    using (var fs = new FileStream(Path.Combine(uploadPath, name), chunk == 0 ? FileMode.Create : FileMode.Append))
    {
        var buffer = new byte[fileUpload.InputStream.Length];
        fileUpload.InputStream.Read(buffer, 0, buffer.Length);
        fs.Write(buffer, 0, buffer.Length);
    }
    return Json(new { message = "chunk uploaded", name = name });
}

【讨论】:

  • 达林,使用 PLUpload 我将只有div,没有输入......这是我的问题。请参阅我编辑的问题。
  • 哦,所以你想使用Plupload?好吧,让我更新我的答案。
  • 我没有输入,只有 div,请参阅我更新的问题。谢谢
  • 是的,我了解您的最后一个代码,但我不想作为 ajax 请求上传。我想在按下提交表单时(不仅包含文件,还包含更多字段)我想上传多个选定的文件。
  • 那么不要使用PLUpload。这个插件的重点是异步上传文件。如果您想以标准方式上传多个文件,那么它可以像文件输入一样简单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-16
  • 2012-02-13
  • 2021-03-31
  • 2019-10-13
相关资源
最近更新 更多