List Blobs in Azure Blob Storage

This document explains how to list blobs in an Azure storage container. You can list blobs programmatically using the Azure Storage SDKs, REST API, or Azure CLI.

Methods for Listing Blobs

Azure Storage provides several ways to retrieve a list of blobs within a container. The most common scenarios involve listing blobs directly within a container or listing blobs recursively within a virtual directory structure.

1. Listing Blobs in a Container (Flat Listing)

A flat listing returns all blobs directly within the specified container. This is the default behavior when you request a list of blobs.

2. Listing Blobs with Delimiters (Simulating Folders)

Blob storage supports a hierarchical namespace. You can use a delimiter (typically a forward slash /) to simulate directory structures. By providing a delimiter, you can list blobs within a specific "folder" or list all "folders" at a given level.

Using the Azure SDKs

The Azure Storage SDKs offer convenient methods for listing blobs. Below are examples using the .NET SDK.

.NET Example: List Blobs


using Azure.Storage.Blobs;
using System;

public class BlobLister
{
    public static void ListAllBlobs(string connectionString, string containerName)
    {
        BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);
        BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName);

        Console.WriteLine("Blobs in container:");
        foreach (BlobItem blobItem in containerClient.GetBlobs())
        {
            Console.WriteLine("\t" + blobItem.Name);
        }
    }

    public static void ListBlobsInFolder(string connectionString, string containerName, string virtualDirectoryName)
    {
        BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);
        BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName);

        Console.WriteLine($"Blobs in virtual directory '{virtualDirectoryName}':");
        foreach (BlobItem blobItem in containerClient.GetBlobs(prefix: virtualDirectoryName + "/"))
        {
            Console.WriteLine("\t" + blobItem.Name);
        }
    }

    public static void ListFolders(string connectionString, string containerName, string virtualDirectoryName = null)
    {
        BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);
        BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName);

        Console.WriteLine($"Sub-folders in '{virtualDirectoryName ?? containerName}':");
        var options = new ListBlobsOptions()
        {
            Prefix = virtualDirectoryName != null ? virtualDirectoryName + "/" : null,
            Delimiter = "/"
        };

        foreach (BlobHierarchyItem blobHierarchyItem in containerClient.GetBlobsByHierarchy(options))
        {
            if (blobHierarchyItem.IsPrefix) // It's a folder
            {
                Console.WriteLine("\t" + blobHierarchyItem.Prefix);
            }
        }
    }

    public static void Main(string[] args)
    {
        string connectionString = "YOUR_AZURE_STORAGE_CONNECTION_STRING";
        string containerName = "mycontainer";

        // List all blobs directly in the container
        ListAllBlobs(connectionString, containerName);

        // List blobs in a specific virtual directory
        ListBlobsInFolder(connectionString, containerName, "myfolder");

        // List sub-folders in the container
        ListFolders(connectionString, containerName);

        // List sub-folders within a specific virtual directory
        ListFolders(connectionString, containerName, "myfolder");
    }
}
            

Using the Azure CLI

The Azure Command-Line Interface (CLI) provides a straightforward way to list blobs.

Azure CLI Example: List Blobs


# List all blobs in a container
az storage blob list --account-name  --container-name  --output table

# List blobs in a virtual directory
az storage blob list --account-name  --container-name  --prefix "myfolder/" --output table

# List blobs and simulate folders using delimiter
az storage blob list --account-name  --container-name  --delimiter "/" --output table

# List only directories (simulated) within a prefix
az storage blob list --account-name  --container-name  --prefix "myfolder/" --delimiter "/" --include "directories" --output table
            

Key Concepts and Considerations

Note: When using delimiters, the results will include both blob names and prefixes (directories). You'll need to differentiate between them in your application logic.

Further Reading