【问题标题】:Azure Blob storage client library get downloading linksAzure Blob 存储客户端库获取下载链接
【发布时间】:2021-05-21 18:09:24
【问题描述】:

这个问题是关于 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。

blob 项目。哪个属性???

什么属性可以让我得到一个可下载的链接,然后我需要把它流下来。

在这行代码

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

【问题讨论】:

    标签: azure-blob-storage azure-storage-files azure-storage-account


    【解决方案1】:

    我想我得到了答案,以防它对某人有所帮助。这行代码将为容器内的 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>`;
    

    【讨论】:

      【解决方案2】:

      根据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}`;
      }
      

      【讨论】:

      • 抱歉,我的问题可能不清楚。我不是在询问如何从门户获取 URL。这是关于应该有一个属性来获取代码 blobItem 中的 url 的 JS 库。哪个属性???
      • 更新答案。
      • 谢谢。为 blob 创建服务 SAS 的链接不起作用。似乎它没有正确粘贴。我关注的文档没有 sharedkeyCredentails 和 storedPolicyName。您发布的功能需要它来创建网址。如果没有这两个参数,我不确定这个函数将如何工作。
      • 好像这是您发布的链接。 docs.microsoft.com/en-us/azure/storage/blobs/…
      • 是的,我更新了链接。因此,这些链接本身不会被“下载”,它们会生成,您必须拥有正确的凭据和权限才能做到这一点。在我看来,在此过程中的某个时刻,您很可能需要某种形式的凭据,例如访问密钥。
      猜你喜欢
      • 2020-08-22
      • 2022-12-15
      • 2022-01-07
      • 2016-06-13
      • 1970-01-01
      • 1970-01-01
      • 2012-12-08
      • 2018-01-08
      • 2019-03-21
      相关资源
      最近更新 更多