如何在ASP.NET MVC3中使用HttpFileCollectionBase实现多个文件选择和上传?

问题描述:

我已经使用PLUpload框架实现了多个文件选择。如何在ASP.NET MVC3中使用HttpFileCollectionBase实现多个文件选择和上传?

控制器中的有可能被传递给模型(将处理文件)?

我知道自动从页面中获得所有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> 
+0

是的,您可以。 gofor List 2013-03-18 07:00:14

假设名的文件输入例如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" /> 
... 

UPDATE:

看来,要使用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 }); 
} 
+0

Darin,使用PLUpload我将只有'div',没有输入...这是我的问题。看到我编辑的问题。 – 2013-03-18 07:00:43

+0

哦,所以你想使用Plupload?好吧,让我更新我的答案。 – 2013-03-18 07:02:03

+0

我没有输入,只有div,看到我更新的问题。谢谢 – 2013-03-18 07:04:02