我正在尝试使用unirest将multipart/form-data
图像发送到另一台服务器。他们的.attach()
与fs.createReadStream()
一起使用,但是,我无法将缓冲区转换为图像。逻辑步骤是先将缓冲区转换为Uint8Array,然后从该缓冲区创建读取流。但是,这引发了一条错误消息,指出该数组不能包含空值。从阵列中删除0
个条目几乎可以肯定会破坏图像。
图像不为空,具有所有字节,甚至可以将图像数据作为巨型字符串发送。
这是我尝试过的:
imageBytes = new Uint8Array(image.buffer)
unirest
.post(someURL)
.headers(headers)
.attach("image", fs.createReadStream(imageBytes))
.end(response => {
console.log(response.body);
});
替代方法是:
1.直接附加缓冲区,缓冲区将原始数据作为表单字段发送。不理想,可能会遇到图像尺寸限制。
2.将文件写入存储,而不是保存在内存中。这将处理一些敏感信息,因此需要在一定时间后自动删除,从而导致更多工作。
编辑:我最终切换到request
,因为它允许从缓冲区插入内联“文件”。这样做的代码如下:
request({
uri: someURL,
method: "POST",
formData: {
"image": {
value: image.buffer,
options: {
filename: image.originalname,
contentType: image.mimetype
}
}
}
}, (err, resp, body) => {
if (err) {
console.log("ERROR -> " + err)
}
if (body) {
console.log(body)
}
})
EDIT2:如果您遵循此操作,也请在请求选项中放入encoding: null
。不要像我一样,花一整天的时间跟踪您返回的数据为何是外来格式。 :)