Výpis objektů blob pomocí Go

Tento článek ukazuje, jak vypsat objekty blob pomocí klientského modulu Azure Storage pro Go.

Požadavky

Nastavení prostředí

Pokud nemáte existující projekt, v této části se dozvíte, jak nastavit projekt pro práci s modulem klienta Azure Blob Storage pro Go. Kroky zahrnují instalaci modulu, přidání import cest a vytvoření autorizovaného klientského objektu. Podrobnosti najdete v tématu Začínáme se službou Azure Blob Storage a Go.

Instalace modulů

Pomocí následujícího příkazu nainstalujte modul azblob:

go get github.com/Azure/azure-sdk-for-go/sdk/storage/azblob

Pokud se chcete ověřit pomocí Microsoft Entra ID (doporučeno), nainstalujte azidentity modul pomocí následujícího příkazu:

go get github.com/Azure/azure-sdk-for-go/sdk/azidentity

Přidání cest importu

Do souboru kódu přidejte následující cesty importu:

import (
    "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
	"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)

Tyto cesty importu představují minimum potřebné k zahájení práce. Některé příklady kódu v tomto článku můžou vyžadovat další cesty importu. Konkrétní podrobnosti a ukázkové použití najdete v ukázkách kódu.

Vytvoření objektu klienta

Pokud chcete připojit aplikaci ke službě Blob Storage, vytvořte objekt klienta pomocí příkazu azblob. NewClient. Následující příklad ukazuje, jak vytvořit objekt klienta pro DefaultAzureCredential autorizaci:

func getServiceClientTokenCredential(accountURL string) *azblob.Client {
    // Create a new service client with token credential
    credential, err := azidentity.NewDefaultAzureCredential(nil)
    handleError(err)

    client, err := azblob.NewClient(accountURL, credential, nil)
    handleError(err)

    return client
}

Autorizace

Autorizační mechanismus musí mít potřebná oprávnění k nahrání objektu blob. K autorizaci pomocí Microsoft Entra ID (doporučeno) potřebujete integrovanou roli Storage Blob Data Reader služby Azure RBAC nebo vyšší. Další informace najdete v pokynech k autorizaci pro výpis objektů blob (REST API).

Informace o možnostech výpisu objektů blob

Když vypíšete objekty blob ze svého kódu, můžete zadat řadu možností pro správu způsobu vrácení výsledků 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 pro vrácení objektů blob, jejichž názvy začínají tímto znakem nebo řetězcem. Objekty blob můžete vypsat v ploché struktuře výpisu nebo hierarchicky. Hierarchický výpis vrací objekty blob, jako by byly uspořádány do složek.

Pokud chcete vypsat objekty blob v kontejneru pomocí plochého výpisu, zavolejte následující metodu:

Pokud chcete zobrazit seznam objektů blob v kontejneru pomocí hierarchického výpisu, zavolejte z objektu klienta kontejneru následující metodu:

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

Ve výchozím nastavení vrátí operace výpisu najednou až 5 000 výsledků. Pokud chcete vrátit menší sadu výsledků, zadejte nenulovou hodnotu pole MaxResults v ListBlobsFlatOptions nebo ListBlobsHierarchyOptions.

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

Chcete-li filtrovat seznam vrácených objektů blob, zadejte řetězec nebo znak pole Prefix v ListBlobsFlatOptions nebo ListBlobsHierarchyOptions. Řetězec předpony může obsahovat jeden nebo více znaků. Azure Storage pak vrátí pouze objekty blob, jejichž názvy začínají danou předponou.

Zahrnutí metadat objektů blob nebo jiných informací

Pokud chcete do výsledků zahrnout metadata objektů blob, nastavte Metadata pole jako true součást SeznamuBlobsInclude. Azure Storage obsahuje metadata s každou vrácenou službou blob, takže metadata objektů blob nemusíte načítat samostatně.

Další možnosti pro zahrnutí snímků, verzí, značek indexu objektů blob a dalších informací s výsledky najdete v tématu ListBlobsInclude .

Plochý výpis versus hierarchický výpis

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

Pokud chcete objekty blob uspořádat 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 objekty blob pojmenujete pomocí oddělovače, můžete se rozhodnout, jestli chcete objekty blob vypsat hierarchicky. Pro hierarchickou operaci 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 při procházení klasického systému souborů prostřednictvím kódu programu.

Poznámka:

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

Použití plochého výpisu

Operace výpisu ve výchozím nastavení 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. Tento příklad zahrnuje snímky objektů blob a verze objektů blob, pokud existují:

func listBlobsFlat(client *azblob.Client, containerName string) {
    // List the blobs in the container
    pager := client.NewListBlobsFlatPager(containerName, &azblob.ListBlobsFlatOptions{
        Include: azblob.ListBlobsInclude{Snapshots: true, Versions: true},
    })

    fmt.Println("List blobs flat:")
    for pager.More() {
        resp, err := pager.NextPage(context.TODO())
        handleError(err)

        for _, blob := range resp.Segment.BlobItems {
            fmt.Println(*blob.Name)
        }
    }
}

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

List blobs flat:
file4.txt
folderA/file1.txt
folderA/file2.txt
folderA/folderB/file3.txt

Následující příklad uvádí objekty blob v kontejneru, které začínají konkrétní předponou:

func listBlobsFlatOptions(client *azblob.Client, containerName string, prefix string) {
    // List the blobs in the container with a prefix
    pager := client.NewListBlobsFlatPager(containerName, &azblob.ListBlobsFlatOptions{
        Prefix: to.Ptr(prefix),
    })

    fmt.Println("List blobs with prefix:")
    for pager.More() {
        resp, err := pager.NextPage(context.TODO())
        handleError(err)

        for _, blob := range resp.Segment.BlobItems {
            fmt.Println(*blob.Name)
        }
    }
}

Při předávání řetězce předpony "sample" se výstup podobá:

List blobs with prefix:
sample-blob1.txt
sample-blob2.txt
sample-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 betonové, nezávislé objekty. V důsledku toho se adresáře v seznamu zobrazují jako objekty blob nulové délky.

Alternativní možnost výpisu při práci s hierarchickým oborem názvů naleznete v tématu NewListPathsPager.

Použití hierarchického výpisu

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

Pokud chcete zobrazit seznam objektů blob hierarchicky, použijte následující metodu:

Následující příklad uvádí objekty blob v zadaném kontejneru pomocí hierarchického výpisu. V tomto příkladu je parametr předpony původně nastavený na prázdný řetězec, který vypíše všechny objekty blob v kontejneru. Příklad pak volá operaci výpisu rekurzivně pro procházení hierarchie virtuálních adresářů a výpis objektů blob.

func listBlobsHierarchy(client *azblob.Client, containerName string, prefix string) {
    // Reference the container as a client object
    containerClient := client.ServiceClient().NewContainerClient(containerName)

    pager := containerClient.NewListBlobsHierarchyPager("/", &container.ListBlobsHierarchyOptions{
        Prefix:     to.Ptr(prefix),
        MaxResults: to.Ptr(int32(1)), // MaxResults set to 1 for demonstration purposes
    })

    for pager.More() {
        resp, err := pager.NextPage(context.TODO())
        handleError(err)

        if resp.Segment.BlobPrefixes != nil {
            for _, prefix := range resp.Segment.BlobPrefixes {
                fmt.Println("Virtual directory prefix:", *prefix.Name)

                // Recursively list blobs in the prefix
                listBlobsHierarchy(client, containerName, *prefix.Name)
            }
        }

        for _, blob := range resp.Segment.BlobItems {
            fmt.Println("Blob:", *blob.Name)
        }
    }
}

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

Virtual directory prefix: folderA/
Blob: folderA/file1.txt
Blob: folderA/file2.txt
Blob: folderA/file3.txt
Virtual directory prefix: folderA/folderB/
Blob: folderA/folderB/file1.txt
Blob: folderA/folderB/file2.txt
Blob: folderA/folderB/file3.txt

Poznámka:

Ukázky kódu v této příručce vám pomůžou začít se službou Azure Blob Storage a Go. Měli byste upravit zpracování chyb a Context hodnoty tak, aby vyhovovaly potřebám vaší aplikace.

Zdroje informací

Další informace o výpisu objektů blob pomocí klientského modulu služby Azure Blob Storage pro Go najdete v následujících zdrojích informací.

Ukázky kódu

  • Zobrazení ukázek kódu z tohoto článku (GitHub)

Operace rozhraní REST API

Sada Azure SDK for Go 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 Go. Metody klientské knihovny pro výpis objektů blob používají následující operaci rozhraní REST API:

Prostředky klientského modulu

Viz také

  • Tento článek je součástí příručky pro vývojáře služby Blob Storage pro Go. Další informace najdete v úplném seznamu článků příručky pro vývojáře na webu Sestavení aplikace Go.