Nodejs 发送 multipart/form-data 类型,有什么好的解决方案?

发布于 1周前 作者 ionicwang 来自 nodejs/Nestjs

Nodejs 发送 multipart/form-data 类型,有什么好的解决方案?

有个需求需要在 nodejs 后端发送 multipart/form-data 请求做文件上传。

有个初步想法就是: 自己拼接表单到 body

大概这样:

request.write( '--' + boundaryKey + '\r\n'

  • 'Content-Type: application/octet-stream\r\n'

  • 'Content-Disposition: form-data; name="my_file"; filename="my_file.bin"\r\n'

  • 'Content-Transfer-Encoding: binary\r\n\r\n' ); fs.createReadStream('./my_file.bin', { bufferSize: 4 * 1024 }) .on('end', function() {

    request.end('\r\n--' + boundaryKey + '--'); }) // set "end" to false in the options so .end() isn't called on the request .pipe(request, { end: false })


3 回复

在 Node.js 中发送 multipart/form-data 类型的数据,可以使用 form-data 库,这个库能够方便地构建和发送表单数据,包括文件和文本字段。以下是一个使用 form-data 库发送 multipart/form-data 请求的示例:

首先,确保你已经安装了 form-datanode-fetch(或任何其他 HTTP 客户端库,如 axios):

npm install form-data node-fetch

然后,你可以使用以下代码来发送一个 multipart/form-data 请求:

const fetch = require('node-fetch');
const FormData = require('form-data');
const fs = require('fs');

const form = new FormData();
form.append('username', 'exampleUser');
form.append('avatar', fs.createReadStream('/path/to/file.jpg'));

fetch('https://example.com/upload', {
  method: 'POST',
  body: form,
  headers: {
    ...form.getHeaders()
  }
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));

在这个示例中:

  1. 我们创建了一个 FormData 实例。
  2. 使用 form.append() 方法添加文本字段和文件字段。对于文件字段,我们使用 fs.createReadStream() 来读取文件流。
  3. 使用 fetch 发送 POST 请求,并在请求头中包含 form.getHeaders() 以正确设置 Content-Type

这种方法适用于需要上传文件或发送包含多种类型数据的表单请求的场景。

回到顶部