如何在 formData 对象中附加文件而不在 Node.js 中物理保存文件?

Posted

技术标签:

【中文标题】如何在 formData 对象中附加文件而不在 Node.js 中物理保存文件?【英文标题】:How to append file in formData object without physically saving file in Node.js? 【发布时间】:2021-08-12 20:10:44 【问题描述】:

我正在尝试开发一个应用程序以将文件从 react 上传到 NodeJs。一旦从 multer 上传运行几个验证,然后再次将文件作为 multipart/form-data 的一部分发送到另一个 API。我无法使用上传的文件附加到 formData 中,如下所示。

  router.post("/upload", uploadAndScan.any("filename"), (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 )
      );
  );

我的 scanFiles 函数看起来像

import FormData from "form-data";
export function scanFiles(file) 
  return new Promise((resolve, reject) => 
    const hrstart = process.hrtime();
    const formData = new FormData();
    formData.append("file", file), "sample_pdf.pdf"); // Getting error in this line

最后一行出现错误,因为它需要一个 usvstring 或 Blob,但我无法提供任何内容。我无法将文件保存到磁盘,因为它可能有一些病毒。我正在寻找是否有办法将文件转换为 Blob 或以其他方式将文件附加到 formData 中。

【问题讨论】:

【参考方案1】:

如果您将 multer 与 MemoryStorage 一起使用(这是默认设置),您将在 file.buffer 中找到文件 Blob/Buffer。所有可用的文件属性都记录在这里:https://github.com/expressjs/multer#file-information。

这个Request Parsing in Node.js Guide(它是免费的)将帮助您在 Node.js 中上传文件。

【讨论】:

谢谢。它的工作。至少我的请求已成功创建。正在寻找这个确切的答案。 我很高兴它成功了?,祝你的项目好运!

以上是关于如何在 formData 对象中附加文件而不在 Node.js 中物理保存文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 $.each 将多个文件输入附加到 FormData 对象?

从文件中读取行而不在末尾附加“\ n”[重复]

如何将不同类型的表单输入附加到 formData()?

如何将带有附加数据的 FormData 文件发送到 asp.net web api ajax 调用

在 formdata 中附加创建的图像文件

将数据 URI 转换为文件,然后附加到 FormData