首页 > 解决方案 > 使用纯 JavaScript 和 Azure-Storage-Js 下载 Azure 存储 Blob

问题描述

我正在尝试仅使用纯 Javascript 和 SDK 来执行此操作。我没有使用 Node.js。我正在将我的应用程序从 SDK azure-storage-js-v10 的 v2 转换为 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 工作,任何帮助将不胜感激。

谢谢,

标签: javascriptazure-storageazure-blob-storagefilesaver.js

解决方案


你需要通过 await blobBody 来获取 body。

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

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

推荐阅读