2016-09-05 2 views
1

Я хочу получить двоичные данные изображения из контейнера хранения Microsoft Azure blob.Извлечь Azure Blob из пользовательского node.js API

Я успешно загрузил изображение в контейнер для хранения на Azure из приложения iOS, используя следующую функцию в AZSCloudBlobContainer.

blockBlob.uploadFromData(imageData, completionHandler: 

Я также могу загрузить его прямо в приложение iOS, используя следующую функцию в AZSCloudBlob.

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); 
    }); 

Отклик извлекает информацию блоб, но я не знаю, как получить фактические двоичные данные изображения?

({ 
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

Как Azure мобильных приложения в Node.js основаны на 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://<your_mobile_app_name>.azurewebsites.net/api/<api_name>

+0

Я отмечу это как правильно, как он отвечает на вопрос совершенно, однако причину, я хотел сделайте это на стороне сервера, чтобы я мог возвратить несколько блоков из контейнера (но не все). Вы знаете, как я это сделаю? – Benzene

+0

Вы можете попытаться создать несколько URL-адресов SAS изображений, а клиентская сторона загрузит удаленные капли на Azure Storage через эти URL-адреса. –

Смежные вопросы