如何从 Node.js 中的 base64 字符串发送表单数据中的文件?

pca*_*let 5 javascript multipartform-data form-data node.js

我目前正在研究 Node.js 中间件,我需要使用 formdata 将文件发送到 API。

当我使用 fs 使用本地存储上的文件创建 ReadStream 并将其放入我的表单数据时,我设法做到了这一点。

我使用 request-promise 发送我的数据:

var formData = {
  'file': fs.createReadStream('myfile.jpg')
}

var options = {
  method: method,
  uri: url,
  formData: formData
}

return rp(options).then(response => response)
Run Code Online (Sandbox Code Playgroud)

现在我不完全了解引擎盖下发生了什么。

我需要发送一个只有 base64 字符串的文件,并且 API 正在等待一个文件,就像我发送的“myfile.jpg”一样。

我试图发送一个从 base64 字符串构建的缓冲区:

var buffer = Buffer.from(base64string, 'base64')

var formData = {
  'file': buffer
}
Run Code Online (Sandbox Code Playgroud)

但它没有用。我最终可以从我的缓冲区创建一个二进制文件并使用 fs 从中创建一个流,但我希望有更好的方法来实现这一点。

另外,我不喜欢处理我不明白的事情,所以如果您有关于文件流如何与 formdatas 一起工作的任何信息,我会接受的!

小智 0

我不确定这是否适用于您的设置,但我所做的是从数据创建一个缓冲区,然后附加一个“路径”属性。此属性允许 request 或其他一些库猜测数据的类型:

  var istream = new Buffer(image, 'base64');
  istream.path = "pic.png";
  server.post( "/upload", {"file":istream}, function(...){} )
Run Code Online (Sandbox Code Playgroud)

上传工作完美无缺。这取决于你的 http 层(我猜)。