Listar blobs com Go
Esse artigo mostra como listar blobs usando o módulo de cliente do Armazenamento do Azure para Go.
Pré-requisitos
- Assinatura do Azure - criar uma gratuitamente
- Conta de armazenamento do Azure – criar uma conta de armazenamento
- Go 1.18 ou posterior
Configure seu ambiente
Se você não tiver um projeto existente, esta seção mostrará como configurar um projeto para trabalhar com o módulo de cliente do Armazenamento de Blobs do Azure para Go. As etapas incluem a instalação do módulo, a adição de caminhos import
e a criação de um objeto cliente autorizado. Para obter detalhes, consulte Introdução ao Armazenamento de Blobs do Azure e Go.
Instalar módulos
Instale o módulo azblob usando o seguinte comando:
go get github.com/Azure/azure-sdk-for-go/sdk/storage/azblob
Para autenticar com o Microsoft Entra ID (recomendado), instale o módulo azidentity
usando o comando a seguir:
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
Adicionar caminhos de importação
No arquivo de código, adicione os seguintes caminhos de importação:
import (
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)
Esses caminhos de importação representam o mínimo necessário para começar. Alguns exemplos de código neste artigo podem exigir caminhos de importação adicionais. Para obter detalhes específicos e uso de exemplo, consulte Exemplos de código.
Criar um objeto cliente
Para conectar um aplicativo ao Armazenamento de Blobs, crie um objeto cliente usando azblob.NewClient. O exemplo a seguir mostra como criar um objeto cliente usando DefaultAzureCredential
para autorização:
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
}
Autorização
O mecanismo de autorização precisa ter as permissões necessárias para carregar um blob. Para autorização com o Microsoft Entra ID (recomendado), você precisa da função interna do RBAC do Azure Leitor de Dados de Blob de Armazenamento ou superior. Para saber mais, consulte as diretrizes de autorização para Listar Blobs (REST API).
Sobre as opções de listagem de blobs
Ao listar blobs do seu código, você pode especificar muitas opções para gerenciar o modo como os resultados são retornados do Armazenamento do Azure. Você pode especificar o número de resultados a serem retornados em cada conjunto de resultados e, em seguida, recuperar os conjuntos subsequentes. Você pode especificar um prefixo para retornar os blobs cujos nomes começam com esse caractere ou cadeia de caracteres. Além disso, você pode listar os blobs em uma estrutura de listagem plana ou hierarquicamente. Uma listagem hierárquica retorna blobs como se eles estivessem organizados em pastas.
Para listar os blobs em um contêiner usando uma listagem simples, chame o seguinte método:
Para listar os blobs em um contêiner usando uma listagem hierárquica, chame o seguinte método de um objeto cliente de contêiner:
Gerenciar quantos resultados são retornados
Por padrão, uma operação de listagem retorna até 5.000 resultados por vez. Para retornar um conjunto menor de resultados, forneça um valor diferente de zero para o campo MaxResults
em ListBlobsFlatOptions ou ListBlobsHierarchyOptions.
Filtrar resultados com um prefixo
Para filtrar a lista de blobs retornados, especifique uma cadeia de caracteres ou caractere para o campo Prefix
em ListBlobsFlatOptions ou ListBlobsHierarchyOptions. A cadeia de caracteres de prefixo pode incluir um ou mais caracteres. O Armazenamento do Azure então retorna somente os blobs cujos nomes começam com esse prefixo.
Incluir metadados de blob ou outras informações
Para incluir metadados de blob com os resultados, defina o campo Metadata
como true
como parte de ListBlobsInclude. O Armazenamento do Microsoft Azure inclui metadados com cada blob retornado, portanto, você não precisa buscar os metadados do blob separadamente.
Consulte ListBlobsInclude para obter opções adicionais para incluir instantâneos, versões, marcas de índice de blob e outras informações com os resultados.
Listagem plana versus listagem hierárquica
Os blobs no Armazenamento do Azure são organizados em um paradigma simples em vez de um paradigma hierárquico (como um sistema de arquivos clássico). No entanto, você pode organizar blobs em diretórios virtuais para imitar uma estrutura de pastas. Um diretório virtual faz parte do nome do blob e é indicado pelo caractere delimitador.
Para organizar blobs em diretórios virtuais, use um caractere delimitador no nome do blob. O caractere delimitador padrão é uma barra (/), mas você pode especificar qualquer caractere como o delimitador.
Se você nomear seus blobs usando um delimitador, poderá optar por listar os blobs hierarquicamente. Para uma operação de listagem hierárquica, o Armazenamento do Azure retornará os diretórios virtuais e blobs que estiverem abaixo do objeto pai. Você pode chamar a operação de listagem recursivamente para percorrer a hierarquia, semelhante ao modo como você percorreria um sistema de arquivos clássico programaticamente.
Observação
Os instantâneos de blob não podem ser listados em uma operação de listagem hierárquica.
Usar uma listagem plana
Por padrão, uma operação de listagem retorna blobs em uma listagem plana. Em uma listagem plana, os blobs não são organizados por diretório virtual.
O exemplo a seguir lista os blobs no contêiner especificado usando a listagem fixa. Este exemplo inclui instantâneos de blob e versões de blob, se existirem:
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)
}
}
}
A saída de exemplo deverá ser semelhante a:
List blobs flat:
file4.txt
folderA/file1.txt
folderA/file2.txt
folderA/folderB/file3.txt
O exemplo a seguir lista blobs em um contêiner que começam com um prefixo específico:
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)
}
}
}
Ao passar uma cadeia de caracteres de prefixo de "sample", a saída é semelhante a:
List blobs with prefix:
sample-blob1.txt
sample-blob2.txt
sample-blob3.txt
Observação
A saída de exemplo mostrada pressupõe que você tenha uma conta de armazenamento com um namespace simples. Se você habilitou o recurso de namespace hierárquico em sua conta de armazenamento, os diretórios não são virtuais. Em vez disso, eles são objetos concretos e independentes. Como resultado, os diretórios aparecem na lista como blobs de comprimento zero.
Para obter uma opção de listagem alternativa ao trabalhar com um namespace hierárquico, confira NewListPathsPager.
Usar uma listagem hierárquica
Quando você chama uma operação de listagem hierarquicamente, o Armazenamento do Azure retorna os diretórios virtuais e os blobs no primeiro nível da hierarquia.
Para listar blobs hierarquicamente, use o seguinte método:
O exemplo a seguir lista os blobs no contêiner especificado usando uma listagem hierárquica. Neste exemplo, o parâmetro de prefixo é inicialmente definido como uma cadeia de caracteres vazia para listar todos os blobs no contêiner. Em seguida, o exemplo chama a operação de listagem recursivamente para percorrer a hierarquia de diretório virtual e os blobs de lista.
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)
}
}
}
A saída de exemplo deverá ser semelhante a:
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
Observação
Os exemplos de código neste guia destinam-se a ajudá-lo a começar a usar o Armazenamento de Blobs do Azure e o Go. Você deve modificar o tratamento de erros e valores Context
para atender às necessidades do aplicativo.
Recursos
Para saber mais sobre como listar blobs usando o módulo de cliente de Armazenamento de Blobs do Azure para Go, consulte os seguintes recursos.
Exemplos de código
- Exibir exemplos de código deste artigo (GitHub)
Operações da API REST
O SDK do Azure para linguagem Go contém bibliotecas que se baseiam na API REST do Azure, permitindo a interação com as operações de API REST por meio de paradigmas conhecidos do Go. Os métodos da biblioteca de clientes para listar blobs usam a seguinte operação de API REST:
- Listar blobs (REST API)
Recursos do módulo cliente
- Documentação de referência do módulo do cliente
- Código-fonte do módulo do cliente
- Pacote (pkg.go.dev)
Confira também
Conteúdo relacionado
- Este artigo faz parte do guia para desenvolvedores do Armazenamento de Blobs para Go. Para saber mais, veja a lista completa de artigos do guia do desenvolvedor em Criar seu aplicativo Go.