【发布时间】:2021-08-10 23:50:03
【问题描述】:
我有一个 NodeJs/React 应用程序。用例是上传文件,让第三方 API 对其进行扫描,然后如果成功保存。在扫描完成之前我们无法保存文件。
我们正在使用 fetch 方法从 react 上传文件作为 multipart-formdata。一旦在 Node.js 中接收到文件以访问该文件并检查文件大小和类型,我们将使用 multer,如下所示。
router.post("/upload", upload.any("fieldname"), (req, res) => {
scanFiles(req.files[0])
.then((data) => {
global.logger.info("scanned successfully.....");
res.status(200);
})
.catch((err) => {
global.logger.info("scan api ended with errors", err);
res.status(400).send({ error: err.message })
});
});
现在扫描 api 也希望我们将文件作为多部分表单数据发送。在这种情况下,如何使用 req.files[0] 中收到的字段追加到 formData。我尝试了以下方法,但失败了
const formData = new FormData();
try {
formData.append("file", file, "sample_pdf");
} catch (err) {
global.logger.error("Form data ended with errors", err);
}
我在尝试执行相同操作时遇到错误。似乎 formData.append 的第二个参数需要一个文件流,而是从 req.files[0] 获取文件对象。在这种情况下,我们需要将文件数据转换为文件流吗?
【问题讨论】:
-
这能回答你的问题吗? NodeJS Request how to send multipart/form-data POST request。你肯定采取了正确的方法:使用 multer;使用 POST。这个例子也可能有帮助:Handling File Uploads in Node.js with Express and Multer。如果您遇到错误:请复制/粘贴确切的错误消息!
-
实际上并没有。我可以使用 multer 上传文件,但是一旦我们在 Node js 级别获得文件,我们希望将其发送到另一个 API,该 API 也希望它作为 multipart/form-data 发送。问题是如何在 formData.append 中附加文件。我们通常可以使用创建 BLOB 的 fileReadSync 来执行此操作,但如果文件已作为 multipart/form-data 上传,则不清楚如何将其更改为 BLOB 类型
-
当您不厌其烦地复制/粘贴 EXACT ERROR msg 而不是模糊的“我遇到错误...”时,它确实很有帮助。这给了我们一些“确定”的东西,我们可以用谷歌搜索。但我理解你的问题是你想DIRECTLY 从请求对象(可能是“Blob”类型)转发二进制数据,而不是先保存到“文件”。对吗?
-
@paulsm:是的。我无法保存文件,因为它可能有一些恶意软件,而是通过将文件对象附加到表单数据来将文件对象作为 BLOB 传递。我不想输入错误消息,因为它含糊不清,当我自己用谷歌搜索时什么都得不到,但你是对的,应该添加错误消息。
标签: node.js reactjs multipartform-data multer form-data