Wyświetlanie listy obiektów blob za pomocą platformy .NET

W tym artykule przedstawiono sposób wyświetlania listy obiektów blob przy użyciu biblioteki klienta usługi Azure Storage dla platformy .NET.

Wymagania wstępne

  • W tym artykule założono, że masz już skonfigurowany projekt do pracy z biblioteką klienta Azure Blob Storage dla platformy .NET. Aby dowiedzieć się więcej o konfigurowaniu projektu, w tym instalacji pakietu, dodawaniu using dyrektyw i tworzeniu autoryzowanego obiektu klienta, zobacz Wprowadzenie do Azure Blob Storage i platformy .NET.
  • Mechanizm autoryzacji musi mieć uprawnienia do wyświetlania listy obiektów blob. Aby dowiedzieć się więcej, zobacz wskazówki dotyczące autoryzacji dla następującej operacji interfejsu API REST:

Informacje o opcjach wyświetlania listy obiektów blob

Podczas wyświetlania listy obiektów blob z kodu można określić wiele opcji zarządzania sposobem zwracania wyników z usługi Azure Storage. Można określić liczbę wyników do zwrócenia w każdym zestawie wyników, a następnie pobrać kolejne zestawy. Można określić prefiks do zwracania obiektów blob, których nazwy zaczynają się od tego znaku lub ciągu. Można również wyświetlać obiekty blob w płaskiej strukturze listy lub hierarchicznie. Hierarchiczna lista zwraca obiekty blob tak, jakby były zorganizowane w foldery.

Aby wyświetlić listę obiektów blob na koncie magazynu, wywołaj jedną z następujących metod:

Zarządzanie liczbą zwracanych wyników

Domyślnie operacja wyświetlania listy zwraca maksymalnie 5000 wyników jednocześnie, ale można określić liczbę wyników, które mają zostać zwrócone przez każdą operację wyświetlania listy. Przykłady przedstawione w tym artykule pokazują, jak zwracać wyniki na stronach. Aby dowiedzieć się więcej na temat pojęć związanych z stronicacją, zobacz Pagination with the Azure SDK for .NET (Stronicowanie przy użyciu zestawu Azure SDK dla platformy .NET).

Filtrowanie wyników przy użyciu prefiksu

Aby filtrować listę obiektów blob, określ ciąg parametru prefix . Ciąg prefiksu może zawierać co najmniej jeden znak. Następnie usługa Azure Storage zwraca tylko obiekty blob, których nazwy zaczynają się od tego prefiksu.

Zwracanie metadanych

Metadane obiektu blob można zwrócić z wynikami, określając wartość metadanych dla wyliczenia BlobTraits .

Lista płaska a lista hierarchiczna

Obiekty blob w usłudze Azure Storage są zorganizowane w modelu płaskim, a nie w modelu hierarchicznym (na przykład w klasycznym systemie plików). Można jednak organizować obiekty blob w katalogi wirtualne , aby naśladować strukturę folderów. Katalog wirtualny stanowi część nazwy obiektu blob i jest wskazywany przez znak ogranicznika.

Aby zorganizować obiekty blob w katalogach wirtualnych, użyj znaku ogranicznika w nazwie obiektu blob. Domyślny znak ogranicznika to ukośnik (/), ale można określić dowolny znak jako ogranicznik.

Jeśli nazywasz obiekty blob za pomocą ogranicznika, możesz wybrać hierarchię wyświetlania listy obiektów blob. W przypadku operacji listy hierarchicznej usługa Azure Storage zwraca wszystkie katalogi wirtualne i obiekty blob pod obiektem nadrzędnym. Operację wyświetlania listy można wywołać cyklicznie, aby przejść przez hierarchię, podobnie jak w przypadku programowego przechodzenia przez klasyczny system plików.

Korzystanie z listy płaskiej

Domyślnie operacja wyświetlania listy zwraca obiekty blob na płaskiej liście. Na liście płaskiej obiekty blob nie są zorganizowane przez katalog wirtualny.

W poniższym przykładzie wymieniono obiekty blob w określonym kontenerze przy użyciu listy płaskiej z określonym opcjonalnym rozmiarem segmentu i zapisuje nazwę obiektu blob w oknie konsoli.

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

Przykładowe dane wyjściowe są podobne do następujących:

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

Uwaga

Pokazane przykładowe dane wyjściowe zakładają, że masz konto magazynu z płaską przestrzenią nazw. Jeśli włączono funkcję hierarchicznej przestrzeni nazw dla konta magazynu, katalogi nie są wirtualne. Zamiast tego są to betonowe, niezależne obiekty. W związku z tym katalogi są wyświetlane na liście jako obiekty blob o zerowej długości.

Aby uzyskać alternatywną opcję wyświetlania listy podczas pracy z hierarchiczną przestrzenią nazw, zobacz Wyświetlanie listy zawartości katalogu (Azure Data Lake Storage Gen2).

Używanie listy hierarchicznej

Po wywołaniu operacji listy hierarchicznie usługa Azure Storage zwraca katalogi wirtualne i obiekty blob na pierwszym poziomie hierarchii.

Aby wyświetlić hierarchię obiektów blob, wywołaj metodę BlobContainerClient.GetBlobsByHierarchy lub BlobContainerClient.GetBlobsByHierarchyAsync .

Poniższy przykład przedstawia listę obiektów blob w określonym kontenerze przy użyciu listy hierarchicznej z określonym opcjonalnym rozmiarem segmentu i zapisuje nazwę obiektu blob w oknie konsoli.

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

Przykładowe dane wyjściowe są podobne do następujących:

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

Uwaga

Nie można wyświetlać migawek obiektów blob w operacji hierarchicznej listy.

Wyświetlanie listy wersji lub migawek obiektów blob

Aby wyświetlić listę wersji lub migawek obiektów blob, określ parametr BlobStates za pomocą pola Wersja lub Migawka . Wersje i migawki są wyświetlane od najstarszych do najnowszych.

Poniższy przykład kodu przedstawia sposób wyświetlania listy wersji obiektów 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;
    }
}

Zasoby

Aby dowiedzieć się więcej na temat wyświetlania listy obiektów blob przy użyciu biblioteki klienta Azure Blob Storage dla platformy .NET, zobacz następujące zasoby.

Operacje interfejsu API REST

Zestaw Azure SDK dla platformy .NET zawiera biblioteki, które bazują na interfejsie API REST platformy Azure, co umożliwia interakcję z operacjami interfejsu API REST za pomocą znanych paradygmatów platformy .NET. Metody biblioteki klienta do wyświetlania listy obiektów blob używają następującej operacji interfejsu API REST:

Zasoby biblioteki klienta

Zobacz też