如何在Blob存储中获取容器中所有文件夹的列表?

use*_*943 3 c# azure azure-blob-storage asp.net-core

我正在使用Azure Blob存储来存储我的一些文件。我将它们归类在不同的文件夹中。

到目前为止,我可以使用以下命令获取容器中所有斑点的列表:

    public async Task<List<Uri>> GetFullBlobsAsync()
    {
        var blobList = await Container.ListBlobsSegmentedAsync(string.Empty, true, BlobListingDetails.None, int.MaxValue, null, null, null);

        return (from blob in blobList.Results where !blob.Uri.Segments.LastOrDefault().EndsWith("-thumb") select blob.Uri).ToList();
    }
Run Code Online (Sandbox Code Playgroud)

但是,如何只获取文件夹,然后才能获取该特定子目录中的文件?

这是在ASP.NET Core上

编辑:

容器结构如下所示:

Container  
|  
|  
____Folder 1  
|   ____File 1  
|   ____File 2  
|   
|  
____Folder 2   
    ____File 3  
    ____File 4  
    ____File 5  
    ____File 6  
Run Code Online (Sandbox Code Playgroud)

Pet*_*ons 6

而不是传递的true是值的布尔useFlatBlobListing参数作为记录在这里传递false。这只会给您容器中的顶级子文件夹和Blob

useFlatBlobListing(布尔)

一个布尔值,它指定是按虚拟目录在平面清单中列出Blob,还是按层次结构列出Blob。

为了进一步减少设置以仅列出顶级文件夹,您可以使用 OfType

    public async Task<List<Cloud?Blob?Directory>> GetFullBlobsAsync()
    {
        var blobList = await Container.ListBlobsSegmentedAsync(string.Empty, false, BlobListingDetails.None, int.MaxValue, null, null, null);

        return (from blob in blobList
                             .Results
                             .OfType<CloudBlobDirectory>() 
                select blob).ToList();
    }
Run Code Online (Sandbox Code Playgroud)

这将返回Cloud?Blob?Directory实例的集合。它们又提供了ListBlobsSegmentedAsync方法,因此您可以使用该方法将blob放入该目录中。

顺便说一句,既然您没有真正使用细分,为什么不使用ListBlobsListBlobsSegmentedAsync?更简单的方法呢?