从自定义node.js API检索Azure Blob

时间:2016-09-05 21:53:06

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

我想从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完全不熟悉,并且花了太多时间试图解决这个问题,任何方向都会非常感谢,谢谢。

1 个答案:

答案 0 :(得分:1)

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

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 http://<your_mobile_app_name>.azurewebsites.net/api/<api_name>

的网址直接从浏览器浏览自定义API来测试功能