我正在尝试将blueimp File Upload添加到MVC应用程序中,并且我在后期操作中接收文件时遇到问题(我正在进行多文件上传功能)。有人可以帮我解决这个问题?
在我看来,我有以下代码:
<form id="file_upload" enctype="multipart/form-data" action="Home/SaveFile" method="post">
<input type="file" name="file" multiple="true"/>
<button>Upload</button>
<div>Upload files</div>
</form>
<br />
###############################
<table id="files">
</table>
<button id="start_uploads">Start uploads</button>
<button id="cancel_uploads">Cancel uploads</button>
blueimp文件上传的JQuery代码如下:
$(document).ready(function () {
$('#file_upload').fileUploadUI({
uploadTable: $('#files'),
downloadTable: $('#files'),
buildUploadRow: function (files, index) {
return $('<tr><td class="file_upload_preview"><\/td>' +
'<td>' + files[index].name + '<\/td>' +
'<td class="file_upload_progress"><div><\/div><\/td>' +
'<td class="file_upload_start">' +
'<button class="ui-state-default ui-corner-all" title="Start Upload">' +
'<span class="ui-icon ui-icon-circle-arrow-e">Start Upload<\/span>' +
'<\/button><\/td>' +
'<td class="file_upload_cancel">' +
'<button class="ui-state-default ui-corner-all" title="Cancel">' +
'<span class="ui-icon ui-icon-cancel">Cancel<\/span>' +
'<\/button><\/td><\/tr>');
},
buildDownloadRow: function (file) {
return $('<tr><td>' + file.name + '<\/td><\/tr>');
},
beforeSend: function (event, files, index, xhr, handler, callBack) {
handler.uploadRow.find('.file_upload_start button').click(callBack);
}
});
$('#start_uploads').click(function () {
$('.file_upload_start button').click();
});
$('#cancel_uploads').click(function () {
$('.file_upload_cancel button').click();
});
});
在控制器内部有以下操作方法:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SaveFile(IEnumerable<HttpPostedFileBase> files)
{
foreach (HttpPostedFileBase file in files)
{
//some file upload magic
}
return View("MyView");
}
我正在使用MVC 3。
在action方法中,如果参数的类型为IEnumerable,则它接收null,如果参数的类型为HttpPostedFileBase,则它以奇怪的方式接收文件,并且action方法不起作用。
非常感谢任何形式的帮助,谢谢。
干杯!
答案 0 :(得分:8)
将为每个文件调用SaveFile
控制器操作。所以看起来应该是这样的:
[HttpPost]
public ActionResult SaveFile(HttpPostedFileBase file)
{
//some file upload magic
// return JSON
return Json(new
{
name = "picture.jpg",
type = "image/jpeg",
size = 123456789
});
}
如果您想在同一请求中处理多个上传文件,可以查看respective section of the documentation。
答案 1 :(得分:1)
要获取可以使用的文件,
foreach (string inputTagName in Request.Files)
{
HttpPostedFileBase file = Request.Files[inputTagName];
}
答案 2 :(得分:1)
我知道这是一个老问题,但只是指出这里。除了 Darin Dimitrov 后,返回的json应该与 jQuery文件上传格式兼容 - 即使传输了一个文件,也需要数组。例如:
return Json(
new
{
files = new[]{
new {
name = "www.png",
size = "1234567"
}
}
}
);