微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Azure Blob 存储客户端库获取下载链接

如何解决Azure Blob 存储客户端库获取下载链接

这个问题是关于 Azure blob 存储客户端库的哪个属性会给我 blob 的 url。

我正在按照以下教程获取容器中所有 blob 的列表。我希望最终能够点击一个 blob 并下载它。

https://docs.microsoft.com/en-us/azure/storage/blobs/quickstart-blobs-javascript-browser#prerequisites

我不知道如何从下面的代码获取 blob 的 SAS URL 链接。就像 blobItem 的什么属性会给我下载它的 URL。

blobItem。哪个属性???

什么属性可以让我获得可下载的链接,然后我需要将其流式传输。

在这代码

fileList.innerHTML += `<option value=${blobItem.value.name}>${blobItem.soME LINK}</option>`;

来自以下块

const listFiles = async () => {
    fileList.size = 0;
    fileList.innerHTML = "";
    try {
        reportStatus("Retrieving file list...");
        let iter = containerClient.listBlobsFlat();
        let  blobItem = await iter.next();
        while (!blobItem.done) {
            fileList.size += 1;
           // fileList.innerHTML += `<option>${blobItem.value.name}</option>`;
            fileList.innerHTML += `<option value=${blobItem.value.name}>${blobItem.soME LINK}</option>`;
            blobItem = await iter.next();
        }
        if (fileList.size > 0) {
            reportStatus("Done.");
        } else {
            reportStatus("The container does not contain any files.");
        }
    } catch (error) {
        reportStatus(error.message);
    }
};

解决方法

我想我得到了答案,以防它对某人有所帮助。这行代码将提供容器内 blob 项的 url

${containerClient.getBlobClient(blobItem.value.name).url}

这就是在上面发布的文档中可以看到的。替换这一行

  fileList.innerHTML += `<option>${blobItem.value.name}</option>`;

可以看到网址

fileList.innerHTML += `<option value=${blobItem.value.name}>${containerClient.getBlobClient(blobItem.value.name).url}</option>`;
,

根据 Create a service SAS for a blob 处的文档:

function getBlobSasUri(containerClient,blobName,sharedKeyCredential,storedPolicyName) {
    const sasOptions = {
        containerName: containerClient.containerName,blobName: blobName
    };

    if (storedPolicyName == null) {
        sasOptions.startsOn = new Date();
        sasOptions.expiresOn = new Date(new Date().valueOf() + 3600 * 1000);
        sasOptions.permissions = BlobSASPermissions.parse("r");
    } else {
        sasOptions.identifier = storedPolicyName;
    }

    const sasToken = generateBlobSASQueryParameters(sasOptions,sharedKeyCredential).toString();
    console.log(`SAS token for blob is: ${sasToken}`);

    return `${containerClient.getBlockBlobClient(blobName).url}?${sasToken}`;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。