Výpis objektů blob pomocí .NET

Tento článek popisuje, jak vypsat objekty blob pomocí klientské knihovny Azure Storage pro .NET.

Požadavky

  • Tento článek předpokládá, že už máte projekt nastavený pro práci s klientskou knihovnou Azure Blob Storage pro .NET. Další informace o nastavení projektu, včetně instalace balíčku, přidání using direktiv a vytvoření autorizovaného objektu klienta, najdete v tématu Začínáme s Azure Blob Storage a .NET.
  • Mechanismus autorizace musí mít oprávnění k výpisu objektů blob. Další informace najdete v pokynech k autorizaci pro následující operaci rozhraní REST API:

Možnosti výpisu objektů blob

Když vypíšete objekty blob z kódu, můžete zadat řadu možností pro správu způsobu, jakým se budou výsledky vracet ze služby Azure Storage. Můžete zadat počet výsledků, které se mají vrátit v každé sadě výsledků, a pak načíst následující sady. Můžete zadat předponu, která vrátí objekty blob, jejichž názvy začínají tímto znakem nebo řetězcem. A objekty blob můžete vypsat v ploché struktuře výpisu nebo hierarchicky. Hierarchický výpis vrací objekty blob, jako by byly uspořádané do složek.

Pokud chcete zobrazit seznam objektů blob v účtu úložiště, zavolejte jednu z těchto metod:

Správa počtu vrácených výsledků

Ve výchozím nastavení operace výpisu vrátí až 5 000 výsledků najednou, ale můžete zadat počet výsledků, které má každá operace výpisu vrátit. Příklady uvedené v tomto článku ukazují, jak vrátit výsledky na stránkách. Další informace o konceptech stránkování najdete v tématu Stránkování pomocí sady Azure SDK pro .NET.

Filtrování výsledků pomocí předpony

Pokud chcete filtrovat seznam objektů blob, zadejte řetězec parametru prefix . Řetězec předpony může obsahovat jeden nebo více znaků. Azure Storage pak vrátí jenom objekty blob, jejichž názvy začínají danou předponou.

Vrácení metadat

Metadata objektu blob můžete vrátit s výsledky zadáním hodnoty Metadata pro výčet BlobTraits .

Plochý výpis versus hierarchický výpis

Objekty blob ve službě Azure Storage jsou uspořádané do plochého paradigmatu, nikoli do hierarchického paradigmatu (například klasického systému souborů). Objekty blob ale můžete uspořádat do virtuálních adresářů , abyste mohli napodobovat strukturu složek. Virtuální adresář tvoří součást názvu objektu blob a je označen znakem oddělovače.

Pokud chcete uspořádat objekty blob do virtuálních adresářů, použijte v názvu objektu blob znak oddělovače. Výchozí znak oddělovače je lomítko (/), ale jako oddělovač můžete zadat libovolný znak.

Pokud pojmenujete objekty blob pomocí oddělovače, můžete zvolit hierarchický seznam objektů blob. Pro operaci hierarchického výpisu vrátí Azure Storage všechny virtuální adresáře a objekty blob pod nadřazeným objektem. Operaci výpisu můžete volat rekurzivně a procházet hierarchii, podobně jako byste programově přecházeli klasický systém souborů.

Použití plochého výpisu

Ve výchozím nastavení operace výpisu vrací objekty blob v plochém výpisu. V plochém výpisu nejsou objekty blob uspořádané podle virtuálního adresáře.

Následující příklad uvádí objekty blob v zadaném kontejneru pomocí plochého výpisu se zadanou volitelnou velikostí segmentu a zapíše název objektu blob do okna konzoly.

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

Ukázkový výstup je podobný následujícímu:

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

Poznámka

Zobrazený ukázkový výstup předpokládá, že máte účet úložiště s plochým oborem názvů. Pokud jste pro svůj účet úložiště povolili funkci hierarchického oboru názvů, adresáře nejsou virtuální. Místo toho jsou to konkrétní, nezávislé objekty. V důsledku toho se adresáře zobrazí v seznamu jako objekty blob s nulovou délkou.

Alternativní možnost výpisu při práci s hierarchickým oborem názvů najdete v tématu Výpis obsahu adresáře (Azure Data Lake Storage Gen2).

Použití hierarchického výpisu

Při hierarchickém volání operace výpisu vrátí Azure Storage virtuální adresáře a objekty blob na první úrovni hierarchie.

Pokud chcete hierarchicky vypsat objekty blob, zavolejte metodu BlobContainerClient.GetBlobsByHierarchy nebo BlobContainerClient.GetBlobsByHierarchyAsync .

Následující příklad vypíše objekty blob v zadaném kontejneru pomocí hierarchického výpisu se zadanou volitelnou velikostí segmentu a zapíše název objektu blob do okna konzoly.

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

Ukázkový výstup je podobný následujícímu:

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

Poznámka

Snímky objektů blob nelze uvést v hierarchické operaci výpisu.

Výpis verzí objektů blob nebo snímků

Pokud chcete vypsat verze objektů blob nebo snímky, zadejte parametr BlobStates pomocí pole Verze nebo Snímek . Verze a snímky jsou uvedené od nejstarších po nejnovější.

Následující příklad kódu ukazuje, jak zobrazit seznam verzí objektů blob.

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

Zdroje informací

Další informace o tom, jak zobrazit seznam objektů blob pomocí klientské knihovny Azure Blob Storage pro .NET, najdete v následujících zdrojích informací.

Operace rozhraní REST API

Sada Azure SDK pro .NET obsahuje knihovny, které jsou postavené na rozhraní Azure REST API a umožňují interakci s operacemi rozhraní REST API prostřednictvím známých paradigmat .NET. Metody klientské knihovny pro výpis objektů blob používají následující operaci rozhraní REST API:

Prostředky klientské knihovny

Viz také