从Azure容器和子目录获取所有Blob Uris

时间:2019-06-19 18:26:02

标签: c# azure azure-storage-blobs

如何从C#中的整个天蓝色blob存储容器中获取所有blob Uris的列表?

2 个答案:

答案 0 :(得分:0)

已更新,感谢David Makogon将我指向“ useFlatBlobListing:true”标志。 我已经更新了此答案,并且我知道它可能被标记为重复。 这将返回容器中的所有blob Uris。

 public List<string> GetAllBlobUrisInContainer(string containerName, string blobNamePrefix = "")
    {
        List<string> uriList = new List<string>();
        var container = GetBlobContainer(containerName);
        var blobList = container.ListBlobs(useFlatBlobListing: true);
        foreach (var cloudBlockBlob in blobList)
        {
            uriList.Add(cloudBlockBlob.Uri.ToString());
        }

        return uriList;
    }

答案 1 :(得分:-1)

您的代码实际上是多余的。不需要首先在blob容器中列出目录,因为Azure Blob存储中只有两个级别:容器和blob,目录只是一个虚拟概念,在服务端实际上并不存在。

下面是简化代码:

public List<string> GetBlobUris(string containerName, string blobNamePrefix = "")
{
    List<string> uriList = new List<string>();
    var container = GetBlobContainer(containerName);
    List<CloudBlockBlob> cloudBlockBlobs = GetBlobs(containerName, blobNamePrefix);
    foreach (var cloudBlockBlob in cloudBlockBlobs)
    {
        uriList.Add(cloudBlockBlob.Uri.ToString());
    }

    return uriList;
}

public List<CloudBlockBlob> GetBlobs(string containerName, string blobNamePrefix = "")
{
    var container = GetBlobContainer(containerName);
    return container.ListBlobs().OfType<CloudBlockBlob>().Where(b => b.Name.StartsWith(blobNamePrefix)).ToList();
}