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
- Prefix: Use the
prefixparameter to filter blobs by a specific path or name. - Delimiter: The
delimiterparameter (commonly/) allows you to treat blob names with the delimiter as belonging to a hierarchical structure, enabling you to list "directories" or blobs within them. - Continuation Token: For very large containers, the listing operation may return a continuation token. You need to use this token in subsequent requests to retrieve the remaining blobs. The SDKs often handle this automatically.
- Performance: For optimal performance, avoid listing extremely large numbers of blobs directly. Consider using prefixes and delimiters to narrow down your results.
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.