【发布时间】:2021-08-03 19:47:39
【问题描述】:
我在我的 React 应用程序中发送了一个请求,其中包含一个带有各种字段的 JSON 正文,其中有一个 File 类型图像的数组。
const body = {
title: 'title',
price: 100,
images: [...]
};
axios.post(url, body);
这不起作用,images 数组到达 Express 应用程序时为空。
我咨询了互联网并尝试使用FormData。但是,我看到的所有解决方案(example)都只有图像,即
const images = [...];
const data = new FormData();
images.forEach(img => data.append(img.title, img));
但我想要整个东西——文本和图像,因为这个输入应该进入 MongoDB。
我试过简单地将整个对象放在FormData:
const data = new FormData();
data.append('body', body);
但我一定不明白 FormData 的实际工作原理,因为在 Express 中尝试 iterate over 和 req.body 只会产生任何结果:
app.get((req, res) => {
const data = Object.fromEntries(req.body) // yields nothing
}
使用multer 之类的任何其他尝试都强化了我做错了什么,因为我一生都无法获得非空的请求正文。
我想做的是能够发送完整的 HTTP 数据主体,其中包括文本、数字和图像数组,这样我就可以在 Express 应用程序上将这些图像保存到磁盘。 任何好的建议将不胜感激。
【问题讨论】:
-
只是给出一个想法(它可能不是最好的)我最近遇到了类似的问题(我正在使用 nodejs azure 函数来上传图像并且不希望它变得太复杂)我通过像这样
images: ['base64string','base64string']将原始base64 作为字符串传递给服务器来解决它 -
@ShmiliBreuer 其余的 JSON 只是 JSON?还是将整个东西翻译成base64?
-
其余的是常规 JSON(图像也是纯 json,不涉及 FormData),我不能说这是否是一种正确/有效的方法,它只是最简单最划算的在那个特定的低优先级用例上为我提供了一种方式。
-
我可能遗漏了一些东西。您使用
Buffer.from(img).toString('base64')将文件转换为字符串,我想您是如何将它们在服务器上转换为可行文件的? -
在我的情况下,我在我的快递服务器上将它上传到一个名为 imagekit 的图像托管服务,他们接受一个 base64 字符串来上传图像(所以我不需要将它转换为文件) ,但在您的情况下,将其保存到磁盘也许stackoverflow.com/a/6933413/3161811 可以提供帮助。
标签: node.js reactjs express xmlhttprequest