Gerenciar propriedades e metadados de blob com o Go
Além dos dados que eles contêm, os blobs suportam as propriedades do sistema e os metadados definidos pelo usuário. Este artigo mostra como gerenciar as propriedades do sistema e os metadados definidos pelo usuário usando o módulo de cliente do Armazenamento do Microsoft 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 trabalhar com metadados ou propriedades de contêiner. 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 operações get e Colaborador de Dados de Blob de Armazenamento ou superior para as operações set. Para saber mais, confira as diretrizes de autorização para Definir Propriedades de Blob (API REST), Obter Propriedades de Blob (API REST), Definir Metadados de Blob (API REST) ou Obter Metadados de Blob (API REST).
Propriedades e metadados
Propriedades do sistema: existem propriedades do sistema em cada recurso de armazenamento de Blob. Algumas podem ser lidas ou definidas, enquanto outras são de somente leitura. Internamente, algumas propriedades do sistema correspondem a certos cabeçalhos HTTP padrão. A biblioteca de clientes do Armazenamento do Microsoft Azure para Go mantém essas propriedades para você.
Metadados definidos pelo usuário: os metadados definidos pelo usuário consistem em um ou mais pares nome-valor que você especifica para um recurso de armazenamento de Blob. É possível usar os metadados para armazenar valores adicionais com o recurso. Os valores de metadados são apenas para serem usados para os objetivos que você desejar e não afetam o comportamento do recurso.
Os pares de nome/valor de metadados são cabeçalhos HTTP válidos e devem cumprir todas as restrições que regem os cabeçalhos HTTP. Para obter mais informações sobre os requisitos de nomenclatura de metadados, consulte Nomes de metadados.
Observação
As marcas de índice de blob também fornecem a capacidade de armazenar atributos de chave/valor arbitrários definidos pelo usuário junto com o recurso de armazenamento de Blobs do Azure. Embora seja semelhante aos metadados, somente as marcas de índice de blob são indexadas automaticamente e tornam-se pesquisáveis pelo serviço de blob nativo. Os metadados não podem ser indexados e consultados a menos que você utilize um serviço separado, como o Azure Search.
Para saber mais sobre esse recurso, confira Gerenciar e localizar dados no Armazenamento de Blobs do Azure usando o índice de blobs (versão prévia).
Definir e recuperar propriedades
Para definir propriedades em um blob, chame o seguinte método de um objeto cliente de blob:
Todas as propriedades não explicitamente definidas são limpas. Para preservar as propriedades existentes, primeiro você pode recuperar as propriedades do blob e usá-las para preencher os cabeçalhos que não estão sendo atualizados.
O exemplo de código a seguir define as propriedades do sistema BlobContentType
e BlobContentLanguage
em um blob, preservando as propriedades existentes:
func setBlobProperties(client *azblob.Client, containerName string, blobName string) {
// Reference the blob as a client object
blobClient := client.ServiceClient().NewContainerClient(containerName).NewBlobClient(blobName)
// Get the existing blob properties
resp, err := blobClient.GetProperties(context.TODO(), nil)
handleError(err)
// Set the new blob properties and include existing properties
_, err = blobClient.SetHTTPHeaders(context.TODO(), blob.HTTPHeaders{
BlobContentType: to.Ptr("text/plain"),
BlobContentLanguage: to.Ptr("en-us"),
BlobContentEncoding: resp.ContentEncoding,
BlobContentDisposition: resp.ContentDisposition,
BlobCacheControl: resp.CacheControl,
}, nil)
handleError(err)
}
Para recuperar propriedades em um blob, chame o seguinte método de um objeto cliente de blob:
O exemplo de código a seguir obtém as propriedades de sistema de um blob e exibe alguns dos valores:
func getBlobProperties(client *azblob.Client, containerName string, blobName string) {
// Reference the blob as a client object
blobClient := client.ServiceClient().NewContainerClient(containerName).NewBlobClient(blobName)
// Get the blob properties
resp, err := blobClient.GetProperties(context.TODO(), nil)
handleError(err)
// Print the blob properties
fmt.Printf("Content type: %v\n", *resp.ContentType)
fmt.Printf("Content language: %v\n", *resp.ContentLanguage)
}
Definir e recuperar metadados
Você pode especificar os metadados como um ou mais pares de nome-valor em um recurso de contêiner ou blob. Para definir metadados, envie um mapa contendo pares nome-valor usando o seguinte método de um objeto cliente de blob:
O exemplo de código a seguir define os metadados em um blob:
func setBlobMetadata(client *azblob.Client, containerName string, blobName string) {
// Reference the blob as a client object
blobClient := client.ServiceClient().NewContainerClient(containerName).NewBlobClient(blobName)
// Set the blob metadata
var metadata = make(map[string]*string)
metadata["key1"] = to.Ptr("value1")
metadata["key2"] = to.Ptr("value2")
_, err := blobClient.SetMetadata(context.TODO(), metadata, nil)
handleError(err)
}
Para recuperar metadados, chame o método GetProperties de um objeto cliente de blob e acesse o campo Metadata
na resposta. O método GetProperties
recupera propriedades e metadados de blob chamando a operação Obter Propriedades do Blob e a operação Obter Metadados de Blob.
O exemplo de código a seguir lê metadados em um blob e imprime cada par chave/valor:
func getBlobMetadata(client *azblob.Client, containerName string, blobName string) {
// Reference the blob as a client object
blobClient := client.ServiceClient().NewContainerClient(containerName).NewBlobClient(blobName)
// Get the blob properties, which includes metadata
resp, err := blobClient.GetProperties(context.TODO(), nil)
handleError(err)
// Print the blob metadata
for k, v := range resp.Metadata {
fmt.Printf("%v: %v\n", k, *v)
}
}
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 gerenciar propriedades do sistema e metadados definidos pelo usuário usando o módulo de cliente do Armazenamento de Blobs do Azure para Go, consulte os recursos a seguir.
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 gerenciar propriedades do sistema e metadados definidos pelo usuário usam as seguintes operações de API REST:
- Definir propriedades de blob (API REST)
- Obter propriedades de blob (API REST)
- Definir metadados de blob (API REST)
- Obter metadados de blob (API REST)
Recursos do módulo de cliente
- Documentação de referência do módulo do cliente
- Código-fonte do módulo do cliente
- Pacote (pkg.go.dev)
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.