使用内存文件(Multer memoryStorage)创建createReadStream()

时间:2019-02-25 06:34:52

标签: node.js fs multer unirest

我正在尝试使用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。不要像我一样,花一整天的时间跟踪您返回的数据为何是外来格式。 :)

0 个答案:

没有答案