How to get a list of all folders in an container in Blob Storage?

Viewed 16531

I am using Azure Blob Storage to store some of my files away. I have them categorized in different folders.

So far I can get a list of all blobs in the container using this:

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

But how can I only get the folders, and then maybe the files in that specific subdirectory?

This is on ASP.NET Core btw

EDIT:

Container structure looks like this:

Container  
|  
|  
____Folder 1  
|   ____File 1  
|   ____File 2  
|   
|  
____Folder 2   
    ____File 3  
    ____File 4  
    ____File 5  
    ____File 6  
2 Answers

In order to list only the folders inside a Container and not the content(objects), you can use the following for Scala. It's a generic way to get the subdirectories and can work for even trickier structures like

Container  
|  
|  
____Folder 1  
|   ____Folder 11  
|   ____Folder 12  
|   |.  ____File 111.txt
|   |   
____Folder 2   
    ____Folder 21 
    ____Folder 22  

Here prefix is basically the path whose subdirectories you wish to find. Make sure the '/' delimiter is added to the prefix.

val container: CloudBlobContainer = blobClient.getContainerReference(containerName)
var blobs = container.listBlobs(prefix + '/' ,false, util.EnumSet.noneOf(classOf[BlobListingDetails]), null, null)  

In listBlobs function, the second argument is for using FlatBlobListing and we set that to false since we only need the subdirectories and not their content. The other arguments we can set as null. Blobs will contain the list of subdirectories. You can get the URL by iterating over the list of blobs and calling the getUri function.

Related