Загрузка хранилища BLOB-объектов Azure с использованием чистого JavaScript и Azure-Storage-Js - PullRequest
0 голосов
/ 14 марта 2019

Я пытаюсь сделать это только с помощью чистого Javascript и SDK. Я не использую Node.js. Я преобразую свое приложение из v2 в v10 SDK azure-storage-js-v10

Связанный файл azure-storage.blob.js совместим с UMD стандартный, если не найдена модульная система, следующая за глобальной переменной будет экспортировано: azblob

Мой код здесь:

const serviceURL = new azblob.ServiceURL(`https://${account}.blob.core.windows.net${accountSas}`, pipeline);
const containerName = "container";
const containerURL = azblob.ContainerURL.fromServiceURL(serviceURL, containerName);
const blobURL = azblob.BlobURL.fromContainerURL(containerURL, blobName);

const downloadBlobResponse = await blobURL.download(azblob.Aborter.none, 0);

DownloadBlobResponse выглядит так: downloadBlobResponse

Используя v10, как я могу преобразовать downloadBlobResponse в новый BLOB-объект, чтобы его можно было использовать в функции FileSaver saveAs ()?

В azure-storage-js-v2 этот код работал с небольшими файлами:

let readStream = blobService.createReadStream(containerName, blobName, (err, res) => {
    if (error) {
        // Handle read blob error
    }
});

// Use event listener to receive data
readStream.on('data', data => {
    // Uint8Array retrieved
    // Convert the array back into a blob
    var newBlob = new Blob([new Uint8Array(data)]);
    // Saves file to the user's downloads directory
    saveAs(newBlob, blobName); // FileSaver.js
});

Я пробовал все, чтобы заставить работать v10, любая помощь будет принята с благодарностью.

Спасибо

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Спасибо Сяонин Лю !

Я все еще изучаю асинхронные функции JavaScript и обещания.Думаю, я просто пропустил еще один " await ".Я видел, что «downloadBlobResponse.blobBody» было обещанием, а также типом BLOB-объектов, но я не мог понять, почему он не конвертируется в новый BLOB-объект.Я продолжал получать сообщение об ошибке « Итератор не вызывается ».

Вот мое окончательное рабочее решение:

// Create a BlobURL
const blobURL = azblob.BlobURL.fromContainerURL(containerURL, blobName);

// Download blob
downloadBlobResponse = await blobURL.download(azblob.Aborter.none, 0);

// In browsers, get downloaded data by accessing downloadBlockBlobResponse.blobBody
const data = await downloadBlobResponse.blobBody;

// Saves file to the user's downloads directory
saveAs(data, blobName); // FileSaver.js
0 голосов
/ 14 марта 2019

Вам нужно получить тело, ожидая blobBody.

downloadBlobResponse = await blobURL.download(azblob.Aborter.none, 0);

// data is a browser Blob type
const data = await downloadBlobResponse.blobBody;
...