是否有任何方法或任何受支持的表单数据包将表单数据附加到 Buffer、BinaryString 或 Blob 对象,并通过 API 使用内容类型 multipart/form-data 请求它(它是服务器到服务器的请求,不是来自客户)。我已经知道它可以附加 StreamObject、File 对象,但是当我尝试使用 BinaryString 或 Blob 以及 form-data npm package 时,它会报错。假设我从远程资源获取Blob、Buffer,或者读取本地文件 例如:
import FormData from 'form-data';
const form = new FormData();
form.append('files[]', buffer or blob);
// buffer is retrieved as result from fs.readFile
// Then request this form to an API, it's failed
content-type: multipart/form-data
,但实际的表单数据也需要有
its
content-type
标识,在某些情况下还需要标识文件名:POST /my/server/path HTTP/1.1
....
content-type: multipart/form-data; boundary=--------------------------794262681322510475281872
...
Transfer-Encoding: chunked
2fe5b
----------------------------794262681322510475281872
Content-Disposition: form-data; name="image"; filename="my-image.jpg"
Content-Type: image/jpeg
...a bunch of binary data...
form-data
包从
content-type
推断文件名和 fs.ReadStream
,因为该信息在您读取到流的文件中可用。对于原始 Buffer
或 Blob
,它只是原始数据,而 form-data
无法推断内容类型,因此您需要明确设置它:formData.append('image', buffer, {filename: 'image.jpg', contentType: 'image/jpg'});
您需要使其适应服务器的 API 规范,但这是总体思路。请参阅此处