Wae*_*eez 0 javascript rest node.js express reactjs
我有一个对象数组,每个对象都包含一些字符串类型的属性和一个文件。
这是我的数组的样子:
const args = [
{
name: 'presentation',
price: 9.99,
tags: 'invest, finance, business',
file: File,
thumbnail: File
},
{
name: 'presentation2',
price: 20.99,
tags: 'invest, finance, business',
file: File,
thumbnail: File
}
]
const headers = {
headers: {
Authorization: `Bearer ${token}`
}
};
Run Code Online (Sandbox Code Playgroud)
我的目标是将整个对象数组发送到 Express Server。在那里我会将信息保存到 Mongo 并将文件上传到 S3。但是目前,当我在 POST 请求中发送此文件时,我无法在服务器上获取文件流,甚至req.body当我 console.log 时整个都是空对象
axios.post(`${slidesRoute}/createSlides`, args, headers);
Run Code Online (Sandbox Code Playgroud)
或者,我尝试将所有内容都放入 FormData 中。 例如:
let formData = new FormData();
selectedFiles.forEach((selectedFile, i) => {
formData.append(`name_${i}`, selectedFile.name);
formData.append(`price_${i}`, selectedFile.price);
formData.append(`tags_${i}`, selectedFile.tags);
formData.append(`file_${i}`, selectedFile.file);
formData.append(`thumbnail_${i}`, selectedFile.thumbnail);
});
axios.post(`${slidesRoute}/createSlides`, formData, headers);
Run Code Online (Sandbox Code Playgroud)
然后在后台。我无法使用 multer 捕获这些文件。因为表单数据中的文件名是动态生成的
file_1, file_2 file_3,...
Run Code Online (Sandbox Code Playgroud)
但是 multer 期望传递确切的文件名,例如 multer().array('file')
所以在我的第二种方法中,我无法使用 Multer 捕获文件
您不能在 JSON 中包含文件。文件不可 JSON 序列化。理想情况下,您应该有一个单独的端点来接受您的文件,使用 发送它们content-type: multipart/form-data,接收存储在服务器上的该文件的唯一 ID,然后使用 ID 而不是文件发送您的 JSON。
作为替代方案,您可以将您的文件 Base64 编码为一个字符串,在您的请求中插入这个字符串,然后在接收端将其解码回来
| 归档时间: |
|
| 查看次数: |
2413 次 |
| 最近记录: |