从请求中读取文件并将其上传到存储
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 .
我正在实施 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