Nodejs 发送 multipart/form-data 类型,有什么好的解决方案?
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 })
在 Node.js 中发送 multipart/form-data
类型的数据,可以使用 form-data
库,这个库能够方便地构建和发送表单数据,包括文件和文本字段。以下是一个使用 form-data
库发送 multipart/form-data
请求的示例:
首先,确保你已经安装了 form-data
和 node-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));
在这个示例中:
- 我们创建了一个
FormData
实例。 - 使用
form.append()
方法添加文本字段和文件字段。对于文件字段,我们使用fs.createReadStream()
来读取文件流。 - 使用
fetch
发送 POST 请求,并在请求头中包含form.getHeaders()
以正确设置Content-Type
。
这种方法适用于需要上传文件或发送包含多种类型数据的表单请求的场景。