Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在发布复杂对象的同时上载文件_Javascript_Reactjs_Ajax_Axios_Multipartform Data - Fatal编程技术网

Javascript 如何在发布复杂对象的同时上载文件

Javascript 如何在发布复杂对象的同时上载文件,javascript,reactjs,ajax,axios,multipartform-data,Javascript,Reactjs,Ajax,Axios,Multipartform Data,我有一个页面,我可以创建一个开发人员,这是一个复杂的对象,现在我需要添加上传文件的功能。我已经尝试了很多方法,但仍然不起作用。以下是一个示例(无文件上载): 这会将开发人员及其姓名、地址和任务列表作为复杂对象发送到后端,并保存到数据库中,一切都很美好 现在,我希望能够为每个任务附加一个文件,我遇到了很多麻烦。 因此,首先,我尝试了一个仅使用文件的示例,没有其他内容,它可以正常工作,如下所示: let formData = new FormData(); let files = ...; //

我有一个页面,我可以创建一个开发人员,这是一个复杂的对象,现在我需要添加上传文件的功能。我已经尝试了很多方法,但仍然不起作用。以下是一个示例(无文件上载):

这会将开发人员及其姓名、地址和任务列表作为复杂对象发送到后端,并保存到数据库中,一切都很美好

现在,我希望能够为每个任务附加一个文件,我遇到了很多麻烦。

因此,首先,我尝试了一个仅使用文件的示例,没有其他内容,它可以正常工作,如下所示:

let formData = new FormData();

let files = ...; // files from input

for (let i = 0; i < files.length; i++) {
  formData.append("files", files[i]);
}

httpRequest({
  method: AppConsts.REQUEST_METHOD_POST,
  url: `/testUpload`,
  data: formData
})

我尝试过添加contentType multiform头,尝试过将整个开发人员添加为formData,但仍然不起作用。也许我第二部分做错了?有人请帮我=(

对于您确实需要使用multipart发送formData的文件。因此,我建议对json对象进行字符串化,并将其作为另一个参数添加到表单数据中

const developer = {name: "Andy", ...};

formData.append("developer", JSON.stringify(developer));

在服务器上,您需要解析JSON,但这应该很容易。

我建议您查看这样的库,这样可以更轻松地管理从客户端上传的内容
let files = ...; //  files from input
let developer = {
    name: "Andy",
    address: {
        street: "123 Im stupid rd",
        city: "Los Angeles",
        zip: 12345
    },
    tasks: [
        { name: "wake up", file: files[0] },
        { name: "eat", file: files[1] },
        { name: "take a dump", file: files[2] },
        { name: "sleep", file: files[3] }
    ]
}

axios({
    method: "POST",
    url: '/addDeveloper',
    data: developer
})
const developer = {name: "Andy", ...};

formData.append("developer", JSON.stringify(developer));