我正在使用ASP.NET MVC 5
,jquery
最新版本。
我正在尝试使用jquery fileupload
上传多个文件,但我无法接收多个文件。
查看:
<input id="fileupload" type="file" multiple="multiple" name="files[]" >
<script type="text/javascript">
$(document).ready(function () {
$('#fileupload').fileupload({
dataType: 'json',
url: '/Media/UploadFiles',
autoUpload: true,
done: function (e, data) {
}
}).on('fileuploadprogressall', function (e, data) {
var progress = parseInt(data.loaded / data.total * 100, 10);
$('.progress .progress-bar').css('width', progress + '%');
});
});
</script>
控制器:
[HttpPost]
public ContentResult UploadFiles()
{
foreach (string file in Request.Files)
{ }
}
这里Request.Files
我只收到一个文件。
答案 0 :(得分:2)
您上传的文件实际上是逐个发送的。
您可以更改服务代码
[HttpPost]
public JsonResult UploadFiles()
{
IList<string> filesSaved = new List<string>();
foreach (string file in Request.Files)
{
HttpPostedFileBase hpf = Request.Files[file];
if (hpf.ContentLength > 0)
{
var fileName = hpf.FileName;
filesSaved.Add(fileName);
}
}
return Json(new {files = filesSaved}, JsonRequestBehavior.DenyGet);
}
并插入一个断点,您将看到请求对您发送的每个文件进行一次。
问题在于您的客户端代码。该插件singleFileUploads
中有一个选项,默认为true
,您可以阅读here。
您可以更改客户端代码设置singleFileUploads: false
:
$(document).ready(function () {
$('#fileupload').fileupload({
dataType: 'json',
url: '/Media/UploadFiles',
autoUpload: true,
singleFileUploads: false,
done: function (e, data) {
}
}).on('fileuploadprogressall', function (e, data) {
var progress = parseInt(data.loaded / data.total * 100, 10);
$('.progress .progress-bar').css('width', progress + '%');
});
});
并且一切都应该按预期工作。