我一直在尝试将一组文件上传到MVC
控制器,但到目前为止还没有成功,因为HttpPostedFileBase[]
在控制器响应方法上变成了null
。
首先,我将多个上传的文件保存到这样的变量中:
$("#file").change(function () {
fileArray[fileId] = this.files[0];
fileId++;
});
将文件追加到数组中效果很好(使用Chrome调试器进行检查)。
稍后,当用户提交图像时,我将数据附加到FormData对象中:
var data = new FormData();
$.each(fileArray, function (key, value) {
data.append('files[]', value);
});
然后我终于拨打AJAX
电话:
var serviceURL = '@Url.Action("OpenMaterialRequestSubmit", "OpenMaterialRequest")';
$.ajax({
type: "POST",
url: serviceURL,
data: data,
cache: false,
processData: false,
contentType: false,
success: successFunc,
error: errorFunc
});
我的控制器方法接收到以下标题:
[HttpPost]
public async Task<ActionResult> OpenMaterialRequestSubmit(HttpPostedFileBase[] files)
正如我已经说过的,{p> files
总是null
。
在Google Chrome调试器上请求有效负载:
------WebKitFormBoundaryniIQHyAUAYUfecDX
Content-Disposition: form-data; name="files[]"; filename="Screen Shot 2015-12-03 at 9.19.02 AM.png"
Content-Type: image/png
------WebKitFormBoundaryniIQHyAUAYUfecDX--
有任何线索吗?
答案 0 :(得分:1)
您需要将属性名称files[]
更改为files
$.each(fileArray, function (key, value) {
data.append('files', value);
});
附注:另一种方法是直接将文件添加到FormData
事件中的.change
对象
var data = new FormData();
$("#file").change(function () {
data.append('files', $(this).get(0).files[0]);
});