如何从 Azure 容器中的 blob 中获取所有 URL 的列表?

Posted

技术标签:

【中文标题】如何从 Azure 容器中的 blob 中获取所有 URL 的列表?【英文标题】:How to get a list of all URLs from blobs in a container in Azure? 【发布时间】:2021-05-06 11:41:16 【问题描述】:

到目前为止,我列出了 Azure Blob 存储中容器中 Blob 的名称和创建日期。 现在我想添加来自相同 blob 的 URL 列表。我做了很多研究,但我真的找不到有用的东西。 是否可以使用我用于其他 blob 属性的相同方法来实现这一点,还是有其他方法?

我的代码:

using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Azure.Storage.Blobs;
using System;
using System.Collections.Generic;

namespace getBlobData


    // Define data transfer objects (DTO)
    public class ContainerInfo
    
        public string Name
        
            get; set;
        

        public DateTimeOffset? CreatedOn
        
            get; set;
        
    

    public static class GetBlobData
    
        [FunctionName("getBlobData")]
        public static async Task<List<ContainerInfo>> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req,
            ILogger log)
        
            // Connect to container in storage account
            // Get Blobs inside of it
            string connection_string = Environment.GetEnvironmentVariable("AZURE_STORAGE_CONNECTION_STRING");
            BlobServiceClient blobServiceClient = new BlobServiceClient(connection_string);
            BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient("container");
            var response = containerClient.GetBlobsAsync();

            // Get name and creation date of Blobs
            // Return DTOs
            var res = new List<ContainerInfo>();
            await foreach (var item in response)
            
                res.Add(new ContainerInfo  Name = item.Name, CreatedOn = item.Properties.CreatedOn );
            

            return res;
        

    


【问题讨论】:

【参考方案1】:

如果您使用的是最新的 azure 存储包Azure.Storage.Blobs 12.8.0,则有 2 种方法可以获取 blob url。

1.您可以自己构建blob url。首先,您需要获取blob container url,然后将blob 容器url 与blob name 连接起来,代码如下:

        //other code
        BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient("container");

        //get the container url here
        string container_url = containerClient.Uri.ToString();
        var response = containerClient.GetBlobsAsync();

        // Get name and creation date of Blobs
        // Return DTOs
        var res = new List<ContainerInfo>();
        await foreach (var item in response)
        
            //here you can concatenate the container url with blob name
            string blob_url = container_url + "/" + item.Name;                

            res.Add(new ContainerInfo  Name = item.Name, CreatedOn = item.Properties.CreatedOn );
        

2.另外一个就是你得到blob名字后,可以使用blob名字来获取BlobClient,然后就可以从BlobClient获取blob url。代码如下:

        //other code
        BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient("container");
        var response = containerClient.GetBlobsAsync();

        //define a BlobClient here.
        BlobClient blobClient = null;

        // Get name and creation date of Blobs
        // Return DTOs
        var res = new List<ContainerInfo>();
        await foreach (var item in response)
        
            //here you can get a BlobClient by using blob name
            blobClient = containerClient.GetBlobClient(item.Name); 

            //then you can get the blob url by using BlobClient
            string blob_url = blobClient.Uri.ToString();              

            res.Add(new ContainerInfo  Name = item.Name, CreatedOn = item.Properties.CreatedOn );
        

【讨论】:

【参考方案2】:

我假设您可以按照 blob URL 构造的约定来生成相关的 URL

https://myaccount.blob.core.windows.net/mycontainer/myblob

https://docs.microsoft.com/en-us/rest/api/storageservices/copy-blob-from-url

【讨论】:

以上是关于如何从 Azure 容器中的 blob 中获取所有 URL 的列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 API 调用从 azure 容器中获取 blob 数据?

列出 Azure 存储容器中的 Blob,包括元数据

C# Azure.Storage.Blobs SDK 如何列出和压缩容器中的所有文件并将压缩文件存储在另一个容器中

获取 Azure 存储容器中的 blob 计数

如何将所有文件从 blob 存储容器导入和处理到 azure databricks

如何使用 C# 中的 Azure.Storage.Blobs 从 Azure 存储 Blob 以 ByteArray 格式获取文件