从请求中读取文件并将其上传到存储

Reading file from request and uploading it to storage

我正在实施 API 将满足处理请求 - 其中之一是 POST 将在其中存储我必须上传到 azure 存储的图像文件(示例:jpg) .

我找到了一个模块,如果以流或文本的形式显示(所以,可能与流一起使用),它将允许将字段放入存储中(似乎是这样,我无法尝试)

azure-storage

然后我使用 Postman 发送带有文件的请求: ( Tool for sending multipart/form-data request )

但是现在,在请求的正文中只有大量难以理解的字符(看起来没问题,因为它是图像),但我现在卡住了 - 我不知道如何从 reuqest 获取该文件并将其传递给模块的功能?

更多代码:

route.route('/photo')
    .post(
    (req, res) => {
            upload(req);
    })

upload(request) 函数的一部分(现在使用本地文件实现了函数,所以我可以测试它是否甚至可以在给定的连接下工作 - 它做到了!):

process.env.AZURE_STORAGE_CONNECTION_STRING = 'MyConnectionString'
upload(request) {

        blobService.createBlockBlobFromLocalFile(
            ContaienrName,
            FileNameInContainer,
            'D:\My\Path\To\image.jpg', 
            function (error, result, response) {
                if (!error) {
                    console.log(' >> File uploaded!');
                }
                else {
                    console.log(' >> File NOT uploaded!');
                }
                console.log(' >> --------------------');
                console.log(' >> ERROR : ');
                console.log(error);
                console.log(' >> --------------------');
                console.log(' >> RESULT : ');
                console.log(result);
                console.log(' >> --------------------');
                console.log(' >> RESPONSE : ');
                console.log(response);
                console.log(' >> --------------------');

                resolve(resultReturning);
            }
        );
}

编辑#1: 我设法得到了 "part" 的请求,我将不得不处理我的天性:

Content-Disposition: form-data; name="image"; filename="71127.jpeg"
Content-Type: image/jpeg

首先,您需要将传入的 multipart/form-data 解析为流。您可以使用 connect-busbody to do that. For more infomation, please refer to Mick Cullen's answer.

二、使用createWriteStreamToBlockBlob instead of createBlockBlobFromLocalFile to provide a stream to write to a block blob. The sample code for node.js with azure-storage you can check out .