Нужна помощь в загрузке изображений из BLOB-объектов Azure с помощью NodeJS - PullRequest
0 голосов
/ 29 января 2019

Я получил большую часть кода из быстрого запуска NodeJS Blob из Azure, я могу успешно выгружать файлы, включая изображения, и прекрасно вижу их на панели управления хранилищем Azure.Но я не могу загрузить их или получить URL-адрес для них, и мне нужен URL-адрес для моей базы данных, чтобы я мог запросить его и использовать URL-адрес для получения файла.

Часть загрузки кода вбыстрый старт мне не так понятен, кажется, он сделан для текста, так же как и для загрузки.Если я зайду в свою панель управления лазурным хранилищем, я смогу увидеть контейнер и увидеть большой двоичный объект, созданный с изображением, и могу щелкнуть изображение, и оно загрузится на другой странице.Однако если я зайду в свойства и выберу Uri: https://facerstorage.blob.core.windows.net/a00008/sun.png и вставлю его в свой браузер, я получу:
enter image description here

И я также распечатаюURL возвращен из blockBlobURL, и он такой же, как в Uri на панели инструментов blobs выше, хотя у него есть '/./' между a0009 и sun.png, который удаляется браузером, например: https://facerstorage.blob.core.windows.net/a00009/./sun.png" то же самое, и я получаю ту же ошибку.

Не уверен, что здесь не так

Я использовал код из BLOB-объектов nodejs, чтобы запустить код для загрузки следующим образом:

const blockBlobURL = BlockBlobURL.fromContainerURL(containerURL, content);
console.log("The blobs URL is: " + JSON.stringify(blockBlobURL.url));
const downloadResponse = await blockBlobURL.download(aborter, 0);
downloadedContent = downloadResponse.readableStreamBody.read(content.length)//.toString();
console.log(`Downloaded blob content: "${downloadedContent}"`);

У меня нет кода для функции BlockBlobURL.download, и я не понимаю, что делает:

  const downloadResponse = await blockBlobURL.download(aborter, 0);
    downloadedContent = downloadResponse.readableStreamBody.read(content.length)//.toString();

.

Я думаю, что из URL выше тех, которые я уже смог бы получить доступ к изображению из этого URL, но я получаю ошибки, как показано выше.Не знаю точно, что еще делают эти двое.

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 30 января 2019

Звучит так, будто вы хотите загрузить или показать изображения, хранящиеся в хранилище BLOB-объектов Azure, но контейнер этих изображений не является общедоступным.Это очень похоже на поток SO * Путь к файлу изображения Azure с использованием java .

. Решение заключается в создании URL-адреса BLOB-объекта с подписью SAS для загрузки или непосредственного отображения в браузере.официальный документ Using shared access signatures (SAS) и Manage anonymous read access to containers and blobs, чтобы узнать концепцию.

Вот пример кода в Node для генерации URL-адреса BLOB-объекта с сигнатурой SAS, которыйпроисходит от здесь .

Чтобы создать подпись общего доступа (SAS), используйте метод generateSharedAccessSignature.Кроме того, вы можете использовать вспомогательные функции даты, чтобы легко создать SAS, срок действия которого истекает в некоторый момент относительно текущего времени.

var azure = require('azure-storage');
var blobService = azure.createBlobService();

var startDate = new Date();
var expiryDate = new Date(startDate);
expiryDate.setMinutes(startDate.getMinutes() + 100);
startDate.setMinutes(startDate.getMinutes() - 100);

var sharedAccessPolicy = {
  AccessPolicy: {
    Permissions: azure.BlobUtilities.SharedAccessPermissions.READ,
    Start: startDate,
    Expiry: expiryDate
  }
};

var token = blobService.generateSharedAccessSignature(containerName, blobName, sharedAccessPolicy);
var sasUrl = blobService.getUrl(containerName, blobName, token);

Примечание. Приведенный выше код основан на пакете npm azure-storage v2через npm install azure-storage, а не в предварительной версии v10-Preview через npm i @azure/storage-blob или следуйте официальному документу Quickstart: Upload, download, list, and delete blobs using Azure Storage v10 SDK for JavaScript (preview) для установки.Чтобы использовать v10 API для генерации URL-адреса SAS, вы можете обратиться к моему коду для SO tread Путь к образу файла Azure, используя java в Java, API которого аналогичны этим для Node.

Или просто объединить обычный URL-адрес BLOB-объекта с токеном, чтобы получить URL-адрес с SAS, как показано ниже, так что вы можете просто сгенерировать токен для применения в конце любого URL-адреса BLOB-объекта.

var sasUrl = blobUrl + token;

Затем вы можете использовать URL-адрес с SAS для отображения в браузере через <img src="<sas url>"> или напрямую загрузить его с помощью Http-клиента без какой-либо дополнительной аутентификации до истечения срока действия.

...