【问题标题】:Retrieve Azure Blob from custom node.js API从自定义 node.js API 检索 Azure Blob
【发布时间】:2017-01-13 06:25:54
【问题描述】:

我想从 Microsoft Azure blob 存储容器中检索图像的二进制数据。

我已使用 AZSCloudBlobContainer 上的以下函数从 iOS 应用程序成功地将图像上传到 Azure 上的存储容器。

blockBlob.uploadFromData(imageData, completionHandler:

我也可以使用 AZSCloudBlob 上的以下功能将其直接下载到 iOS 应用程序。

blockBlob.downloadToDataWithCompletionHandler({(error: NSError?, data: NSData?)

我遇到的问题是我希望能够从 node.js 服务器端脚本中检索图像,而不是直接从应用程序中检索。其中,我尝试了以下代码...

var containerName = 'containerName';
var blobService = storage.createBlobService(accountName, accountKey);
var blobName = 'blobname';
var fs = require('fs');
var stream = fs.createWriteStream('output.txt');

blobService.getBlobToStream(containerName, blobName, stream, function (error, result, response2) {

        response.json(result);
    });

响应检索到blob信息但不知道如何获取图像的实际二进制数据?

({
blobType = BlockBlob;
container = containername;
contentLength = 14593;
contentSettings =     {
    contentType = "application/octet-stream";
};
etag = "\"0x8D********\"";
lastModified = "Mon, 05 Sep 2016 18:57:41 GMT";
lease =     {
    state = available;
    status = unlocked;
};
metadata =     {
};
name = "blobname";
requestId = "ce3e7************";
serverEncrypted = false;
})

我也尝试了许多其他途径,但我对 node.js 完全陌生,并且花了太多时间试图解决这个问题,任何方向都将不胜感激,谢谢。

【问题讨论】:

    标签: ios node.js azure azure-blob-storage


    【解决方案1】:

    由于 Node.js 中的 Azure 移动应用程序基于 Expressjs,其 response 中间件是一种可写流,您可以利用函数 getBlobToStream() 直接将内容流发送到客户端。例如

    module.exports = {
        "get": function (req, res, next) {
            var azure = require('azure-storage');
            var blobsrv = azure.createBlobService(
                '<storage_account>',
                '<storage_key>'
                )
            blobsrv.getBlobToStream('<container>', '<blob>', res, function (error, result) {})
        }
    }
    

    您可以通过 api 的 URL http://&lt;your_mobile_app_name&gt;.azurewebsites.net/api/&lt;api_name&gt; 直接从浏览器浏览自定义 api 来测试功能

    【讨论】:

    • 我会将其标记为正确,因为它完美地回答了问题,但是我想在服务器端这样做的原因是我可以从容器返回多个 blob(但不是全部)。你知道我会怎么做吗?
    • 您可以尝试生成图像 blob 的多个 SAS Url,然后客户端通过这些 url 在 Azure 存储上加载远程 blob。
    猜你喜欢
    • 1970-01-01
    • 2021-07-26
    • 2017-10-12
    • 2019-12-18
    • 2019-05-09
    • 1970-01-01
    • 2020-03-24
    • 2015-07-27
    • 1970-01-01
    相关资源
    最近更新 更多