Udostępnij za pośrednictwem


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

W tym artykule pokazano, jak wyświetlić listę obiektów blob przy użyciu biblioteki klienta usługi Azure Storage dla platformy .NET.

Wymagania wstępne

Konfigurowanie środowiska

Jeśli nie masz istniejącego projektu, w tej sekcji pokazano, jak skonfigurować projekt do pracy z biblioteką klienta usługi Azure Blob Storage dla platformy .NET. Kroki obejmują instalację pakietu, dodawanie using dyrektyw i tworzenie autoryzowanego obiektu klienta. Aby uzyskać szczegółowe informacje, zobacz Rozpoczynanie pracy z usługami Azure Blob Storage i .NET.

Instalowanie pakietów

Z katalogu projektu zainstaluj pakiety dla bibliotek klienta usługi Azure Blob Storage i tożsamości platformy Azure przy użyciu dotnet add package polecenia . Pakiet Azure.Identity jest wymagany w przypadku połączeń bez hasła z usługami platformy Azure.

dotnet add package Azure.Storage.Blobs
dotnet add package Azure.Identity

Dodawanie using dyrektyw

Dodaj te using dyrektywy na początku pliku kodu:

using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Blobs.Specialized;

Niektóre przykłady kodu w tym artykule mogą wymagać dodatkowych using dyrektyw.

Tworzenie obiektu klienta

Aby połączyć aplikację z usługą Blob Storage, utwórz wystąpienie klasy BlobServiceClient. W poniższym przykładzie pokazano, jak utworzyć obiekt klienta przy użyciu DefaultAzureCredential autoryzacji:

public BlobServiceClient GetBlobServiceClient(string accountName)
{
    BlobServiceClient client = new(
        new Uri($"https://{accountName}.blob.core.windows.net"),
        new DefaultAzureCredential());

    return client;
}

Możesz zarejestrować klienta usługi na potrzeby wstrzykiwania zależności w aplikacji .NET.

Można również tworzyć obiekty klienta dla określonych kontenerów lub obiektów blob. Aby dowiedzieć się więcej na temat tworzenia obiektów klienta i zarządzania nimi, zobacz Tworzenie obiektów klienta korzystających z zasobów danych i zarządzanie nimi.

Autoryzacja

Mechanizm autoryzacji musi mieć niezbędne uprawnienia do wyświetlania listy obiektów blob. Aby uzyskać autoryzację przy użyciu identyfikatora Entra firmy Microsoft (zalecane), potrzebujesz wbudowanej kontroli dostępu opartej na rolach platformy Azure czytnika danych obiektów blob usługi Storage lub nowszego. Aby dowiedzieć się więcej, zobacz wskazówki dotyczące autoryzacji dla obiektów blob listy (interfejs API REST).

Opcje wyświetlania listy obiektów blob — informacje

Po wyświetleniu listy obiektów blob z kodu można określić szereg opcji zarządzania sposobem zwracania wyników z usługi Azure Storage. Możesz określić liczbę wyników, które mają być zwracane 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. Obiekty blob można również wyświetlać w płaskiej strukturze listy lub hierarchicznie. Hierarchiczna lista zwraca obiekty blob tak, jakby został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ę listy. W przykładach przedstawionych w tym artykule pokazano, jak zwracać wyniki na stronach. Aby dowiedzieć się więcej na temat pojęć dotyczących stronicowania, zobacz Pagination with the Azure SDK for .NET (Stronicowanie przy użyciu zestawu Azure SDK dla platformy .NET).

Filtrowanie wyników za pomocą prefiksu

Aby przefiltrować 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ść Metadane dla wyliczenia Obiektów 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 (np. klasycznym systemie plików). Można jednak organizować obiekty blob w katalogach wirtualnych , 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 nazwij obiekty blob przy użyciu ogranicznika, możesz wybrać hierarchicznie listę 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ć rekursywnie, aby przejść przez hierarchię, podobnie jak w przypadku programowego przechodzenia przez klasyczny system plików.

Używanie listy płaskiej

Domyślnie operacja wyświetlania listy zwraca obiekty blob w 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 płaskiej listy 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

Przedstawione 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 konkretne, 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 List directory contents (Azure Data Lake Storage).

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ć hierarchicznie listę obiektów blob, wywołaj metodę BlobContainerClient.GetBlobsByHierarchy lub BlobContainerClient.GetBlobsByHierarchyAsync .

W poniższym przykładzie wymieniono obiekty 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 wymienić migawek obiektów blob w operacji hierarchicznej listy.

Wyświetlanie listy wersji obiektów blob lub migawek

Aby wyświetlić listę wersji obiektów blob lub migawek, określ parametr BlobStates z polem 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 usługi 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 są oparte 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ż

  • Ten artykuł jest częścią przewodnika dla deweloperów usługi Blob Storage dla platformy .NET. Aby dowiedzieć się więcej, zobacz pełną listę artykułów z przewodnika dla deweloperów w temacie Tworzenie aplikacji platformy .NET.