Share via


Lista blobar med .NET

Den här artikeln visar hur du listar blobar med hjälp av Azure Storage-klientbiblioteket för .NET.

Förutsättningar

  • Den här artikeln förutsätter att du redan har konfigurerat ett projekt för att arbeta med Azure Blob Storage-klientbiblioteket för .NET. Mer information om hur du konfigurerar projektet, inklusive paketinstallation, tillägg using av direktiv och skapande av ett auktoriserat klientobjekt finns i Kom igång med Azure Blob Storage och .NET.
  • Auktoriseringsmekanismen måste ha behörighet att lista blobar. Mer information finns i auktoriseringsvägledningen för följande REST API-åtgärd:

Om alternativ för bloblistning

När du listar blobar från koden kan du ange ett antal alternativ för att hantera hur resultat returneras från Azure Storage. Du kan ange hur många resultat som ska returneras i varje resultatuppsättning och sedan hämta efterföljande uppsättningar. Du kan ange ett prefix för att returnera blobar vars namn börjar med det tecknet eller strängen. Och du kan lista blobar i en platt liststruktur, eller hierarkiskt. En hierarkisk lista returnerar blobar som om de vore ordnade i mappar.

Om du vill lista blobarna i ett lagringskonto anropar du någon av följande metoder:

Hantera hur många resultat som returneras

Som standard returnerar en listningsåtgärd upp till 5 000 resultat åt gången, men du kan ange det antal resultat som du vill att varje liståtgärd ska returnera. Exemplen som presenteras i den här artikeln visar hur du returnerar resultat på sidor. Mer information om sidnumreringsbegrepp finns i Sidnumrering med Azure SDK för .NET.

Filtrera resultat med ett prefix

Om du vill filtrera listan över blobar anger du en sträng för parametern prefix . Prefixsträngen kan innehålla ett eller flera tecken. Azure Storage returnerar sedan endast de blobar vars namn börjar med det prefixet.

Returnera metadata

Du kan returnera blobmetadata med resultatet genom att ange metadatavärdet för BlobTraits-uppräkningen .

Platt lista jämfört med hierarkisk lista

Blobar i Azure Storage är ordnade i ett platt paradigm i stället för ett hierarkiskt paradigm (till exempel ett klassiskt filsystem). Du kan dock ordna blobar i virtuella kataloger för att efterlikna en mappstruktur. En virtuell katalog utgör en del av blobens namn och anges med avgränsartecknet.

Om du vill ordna blobar i virtuella kataloger använder du ett avgränsartecken i blobnamnet. Standardtecken för avgränsare är ett snedstreck (/), men du kan ange valfritt tecken som avgränsare.

Om du namnger dina blobar med en avgränsare kan du välja att lista blobar hierarkiskt. För en hierarkisk listningsåtgärd returnerar Azure Storage alla virtuella kataloger och blobar under det överordnade objektet. Du kan anropa listningsåtgärden rekursivt för att bläddra i hierarkin, ungefär som du skulle bläddra i ett klassiskt filsystem programmatiskt.

Använd en platt lista

Som standard returnerar en listningsåtgärd blobar i en platt lista. I en platt lista är blobar inte ordnade efter virtuell katalog.

I följande exempel visas blobarna i den angivna containern med en platt lista, med en valfri segmentstorlek angiven och skriver blobnamnet till ett konsolfönster.

private static async Task ListBlobsFlatListing(BlobContainerClient blobContainerClient, 
                                               int? segmentSize)
{
    try
    {
        // Call the listing operation and return pages of the specified size.
        var resultSegment = blobContainerClient.GetBlobsAsync()
            .AsPages(default, segmentSize);

        // Enumerate the blobs returned for each page.
        await foreach (Page<BlobItem> blobPage in resultSegment)
        {
            foreach (BlobItem blobItem in blobPage.Values)
            {
                Console.WriteLine("Blob name: {0}", blobItem.Name);
            }

            Console.WriteLine();
        }
    }
    catch (RequestFailedException e)
    {
        Console.WriteLine(e.Message);
        Console.ReadLine();
        throw;
    }
}

Exempelutdata liknar följande:

Blob name: FolderA/blob1.txt
Blob name: FolderA/blob2.txt
Blob name: FolderA/blob3.txt
Blob name: FolderA/FolderB/blob1.txt
Blob name: FolderA/FolderB/blob2.txt
Blob name: FolderA/FolderB/blob3.txt
Blob name: FolderA/FolderB/FolderC/blob1.txt
Blob name: FolderA/FolderB/FolderC/blob2.txt
Blob name: FolderA/FolderB/FolderC/blob3.txt

Anteckning

Exempelutdata som visas förutsätter att du har ett lagringskonto med ett platt namnområde. Om du har aktiverat funktionen för hierarkisk namnrymd för ditt lagringskonto är kataloger inte virtuella. I stället är de konkreta, oberoende föremål. Därför visas kataloger i listan som blobar med noll längd.

Ett alternativt listalternativ när du arbetar med ett hierarkiskt namnområde finns i Listkataloginnehåll (Azure Data Lake Storage Gen2).

Använda en hierarkisk lista

När du anropar en liståtgärd hierarkiskt returnerar Azure Storage de virtuella katalogerna och blobarna på den första nivån i hierarkin.

Om du vill lista blobar hierarkiskt anropar du metoden BlobContainerClient.GetBlobsByHierarchy eller metoden BlobContainerClient.GetBlobsByHierarchyAsync .

I följande exempel visas blobarna i den angivna containern med hjälp av en hierarkisk lista, med en valfri segmentstorlek angiven och skriver blobnamnet till konsolfönstret.

private static async Task ListBlobsHierarchicalListing(BlobContainerClient container, 
                                                       string prefix, 
                                                       int? segmentSize)
{
    try
    {
        // Call the listing operation and return pages of the specified size.
        var resultSegment = container.GetBlobsByHierarchyAsync(prefix:prefix, delimiter:"/")
            .AsPages(default, segmentSize);

        // Enumerate the blobs returned for each page.
        await foreach (Page<BlobHierarchyItem> blobPage in resultSegment)
        {
            // A hierarchical listing may return both virtual directories and blobs.
            foreach (BlobHierarchyItem blobhierarchyItem in blobPage.Values)
            {
                if (blobhierarchyItem.IsPrefix)
                {
                    // Write out the prefix of the virtual directory.
                    Console.WriteLine("Virtual directory prefix: {0}", blobhierarchyItem.Prefix);

                    // Call recursively with the prefix to traverse the virtual directory.
                    await ListBlobsHierarchicalListing(container, blobhierarchyItem.Prefix, null);
                }
                else
                {
                    // Write out the name of the blob.
                    Console.WriteLine("Blob name: {0}", blobhierarchyItem.Blob.Name);
                }
            }

            Console.WriteLine();
        }
    }
    catch (RequestFailedException e)
    {
        Console.WriteLine(e.Message);
        Console.ReadLine();
        throw;
    }
}

Exempelutdata liknar följande:

Virtual directory prefix: FolderA/
Blob name: FolderA/blob1.txt
Blob name: FolderA/blob2.txt
Blob name: FolderA/blob3.txt

Virtual directory prefix: FolderA/FolderB/
Blob name: FolderA/FolderB/blob1.txt
Blob name: FolderA/FolderB/blob2.txt
Blob name: FolderA/FolderB/blob3.txt

Virtual directory prefix: FolderA/FolderB/FolderC/
Blob name: FolderA/FolderB/FolderC/blob1.txt
Blob name: FolderA/FolderB/FolderC/blob2.txt
Blob name: FolderA/FolderB/FolderC/blob3.txt

Anteckning

Blobögonblicksbilder kan inte visas i en hierarkisk listningsåtgärd.

Lista blobversioner eller ögonblicksbilder

Om du vill visa en lista över blobversioner eller ögonblicksbilder anger du parametern BlobStates med fältet Version eller Ögonblicksbild . Versioner och ögonblicksbilder visas från äldsta till nyaste.

Följande kodexempel visar hur du listar blobversioner.

private static void ListBlobVersions(BlobContainerClient blobContainerClient, 
                                           string blobName)
{
    try
    {
        // Call the listing operation, specifying that blob versions are returned.
        // Use the blob name as the prefix. 
        var blobVersions = blobContainerClient.GetBlobs
            (BlobTraits.None, BlobStates.Version, prefix: blobName)
            .OrderByDescending(version => version.VersionId).Where(blob => blob.Name == blobName);

        // Construct the URI for each blob version.
        foreach (var version in blobVersions)
        {
            BlobUriBuilder blobUriBuilder = new BlobUriBuilder(blobContainerClient.Uri)
            {
                BlobName = version.Name,
                VersionId = version.VersionId
            };

            if ((bool)version.IsLatestVersion.GetValueOrDefault())
            {
                Console.WriteLine("Current version: {0}", blobUriBuilder);
            }
            else
            {
                Console.WriteLine("Previous version: {0}", blobUriBuilder);
            }
        }
    }
    catch (RequestFailedException e)
    {
        Console.WriteLine(e.Message);
        Console.ReadLine();
        throw;
    }
}

Resurser

Mer information om hur du listar blobar med hjälp av Azure Blob Storage-klientbiblioteket för .NET finns i följande resurser.

REST API-åtgärder

Azure SDK för .NET innehåller bibliotek som bygger på Azure REST API, så att du kan interagera med REST API-åtgärder via välbekanta .NET-paradigm. Klientbiblioteksmetoderna för att lista blobar använder följande REST API-åtgärd:

Klientbiblioteksresurser

Se även