在ajax请求中发送带有JSON数据的文件

Soh*_*deh 5 javascript ajax asp.net-mvc jquery

我想将图像文件发送到控制器,但该文件HttpPostedFileBase为空,我进入image: image外部 JSON.stringify({})但不起作用。另外,我改变contentType并看到这个问题并使用它的答案,但我的问题没有解决。

var file_data = $("#Image").prop("files")[0];   
var image = new FormData();

image.append("file", file_data);

$.ajax({
        url: '@postUrl',
        method: "POST",
        contentType: 'application/json',
        data:
            JSON.stringify({
                    image: image,
                    isFirst : true,
                    ExternalProjects: ExternalProjects,
                    // more data

            })
       })
Run Code Online (Sandbox Code Playgroud)

Pat*_*ans 7

您不必将FormData实例放入对象中并将其字符串化。您执行相反的操作:将文件和其他数据放入 FormData 实例中。

正如您链接到的答案所说,将contentTypeprocessData选项更改为 false 以告诉 jQuery 不要处理数据本身。

var file_data = $("#Image").prop("files")[0];   
var fd = new FormData();

fd.append("file", file_data);
fd.append("isFirst", true);
fd.append("ExternalProjects", ExternalProjects);
$.ajax({
    url: '@postUrl',
    method: "POST",
    contentType: false,
    processData: false,
    data:fd
});
Run Code Online (Sandbox Code Playgroud)

您的数据将位于相应的字段中:fileisFirstExternalProjects