如何在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>
假设名的文件输入例如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 });
}
Darin,使用PLUpload我将只有'div',没有输入...这是我的问题。看到我编辑的问题。 – 2013-03-18 07:00:43
哦,所以你想使用Plupload?好吧,让我更新我的答案。 – 2013-03-18 07:02:03
我没有输入,只有div,看到我更新的问题。谢谢 – 2013-03-18 07:04:02
是的,您可以。 gofor List –
2013-03-18 07:00:14