【问题标题】:Uploading binary file using axios?使用axios上传二进制文件?
【发布时间】:2026-02-16 02:20:08
【问题描述】:

我正在尝试将我的服务器端应用程序 (Express.js) 中的 zip 文件作为二进制文件上传到第三方 API(不是 multipart/form-data,而是相当于 Postman 中的正文二进制文件),但我从axios 得到以下错误:

Error: ENOENT: no such file or directory, open '/Users/Name/[object Object]']

我现在的情况:

form = new FormData();
form.append('file', fs.createReadStream(__dirname + '/' + req.files), req.files.name);
axios.post(url, form, {
    headers: {
        'Content-Type': `multipart/form-data; boundary=${form._boundary}`
    }
});

req.files 输出:

file: {
    name: 'myfile.zip',
    data: <Buffer 50 4b 03 04 0a 00 00 00 00 00 66 6c 75 52 00 00 00 00 00 00 00 00 00 00 00 00 1f 00 09 00 64 6f 63 6b 65 72 2d 6d 69 6e 65 63 72 61 66 74 2d 73 65 72 ... 139643 more bytes>,
    size: 139693,
    encoding: '7bit',
    tempFilePath: '',
    truncated: false,
    mimetype: 'application/zip',
    md5: 'e2b648ad295922c6d8d3ef1bc8ce1309',
    mv: [Function: mv]
}

【问题讨论】:

  • console.log(req.files)
  • @madflow file: { name: 'myfile.zip', data: &lt;Buffer 50 4b 03 04 0a 00 00 00 00 00 66 6c 75 52 00 00 00 00 00 00 00 00 00 00 00 00 1f 00 09 00 64 6f 63 6b 65 72 2d 6d 69 6e 65 63 72 61 66 74 2d 73 65 72 ... 139643 more bytes&gt;, size: 139693, encoding: '7bit', tempFilePath: '', truncated: false, mimetype: 'application/zip', md5: 'e2b648ad295922c6d8d3ef1bc8ce1309', mv: [Function: mv] } }

标签: node.js express axios


【解决方案1】:

req.files 是一个对象,所以给 fs.createReadStream 的路径不可能是正确的。

此外,req.files 包含 1 个或多个其他对象,这些对象代表上传到您的服务器应用程序的文件。所以你首先需要在 req.files 中获取你想要的文件对象(在你的情况下是文件)--> req.files.file

因此,要在 fs.createReadStream 中为您的 zip 文件提供正确的路径,您应该使用 req.files.file.name。 form.append 中给定名称(第三个参数)的相同规则。

但是我怀疑 __dirname + '/' + req.files.file.name 是您尝试上传的文件的正确路径(我认为您没有保存它?)。因此,您应该尝试使用文件对象中的数据缓冲区。 例如:

const { data, name } = req.files.file;
form.append('file', data, name);

【讨论】:

  • 感谢您的回答。但是,第 3 方 API 似乎希望通过req.body 而不是通过multipart/form-data 接收二进制 zip 文件。因此,我的文件不被服务器识别为有效。这就是我的问题所在。如何像我通常使用邮递员一样通过正文重现文件二进制上传?
  • @Johndoe 你试过了吗:axios( { method: "post", url: url, data: req.files.file.data, headers: { "Content-Type": "application/zip" } } )?
  • 是的。我确实试过了。不工作
  • @Johndoe API 返回的错误是什么?