Baixar um blob com Go
Este artigo mostra como baixar um blob usando a Módulo de clientes de Armazenamento do Microsoft Azure para Go. Você pode baixar dados de blob em vários destinos, incluindo um caminho de arquivo local, fluxo ou cadeia de caracteres de texto.
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 deve ter as permissões necessárias para executar uma operação de download. 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 Obter Blob (API REST).
Baixar um blob
Você pode usar qualquer um dos seguintes métodos para baixar um blob:
Download em um caminho de arquivo
O exemplo a seguir baixa um blob para um caminho de arquivo:
func downloadBlobToFile(client *azblob.Client, containerName string, blobName string) {
// Create or open a local file where we can download the blob
file, err := os.Create("path/to/sample/file")
handleError(err)
// Download the blob to the local file
_, err = client.DownloadFile(context.TODO(), containerName, blobName, file, nil)
handleError(err)
}
Download em um fluxo
O exemplo a seguir baixa um blob em um fluxo e lê do fluxo chamando o método NewRetryReader.
func downloadBlobToStream(client *azblob.Client, containerName string, blobName string) {
// Download the blob
get, err := client.DownloadStream(context.TODO(), containerName, blobName, nil)
handleError(err)
downloadedData := bytes.Buffer{}
retryReader := get.NewRetryReader(context.TODO(), &azblob.RetryReaderOptions{})
_, err = downloadedData.ReadFrom(retryReader)
handleError(err)
err = retryReader.Close()
handleError(err)
// Print the contents of the blob we created
fmt.Println("Blob contents:")
fmt.Println(downloadedData.String())
}
Especificar opções de transferência de dados para download
Você pode definir opções de configuração ao baixar um blob para otimizar o desempenho. As seguintes opções de configuração estão disponíveis para operações de download:
BlockSize
: o tamanho de cada bloco ao baixar um blob de blocos. O valor padrão é de 4 MB.Concurrency
: O número máximo de conexões paralelas a serem usadas durante o download. O valor padrão é 5.
Essas opções estão disponíveis ao fazer o download usando os seguintes métodos:
O método DownloadStream não dá suporte a essas opções e baixa dados em uma única solicitação.
Para obter mais informações sobre limites de tamanho de transferência para Armazenamento de Blobs, confira Escalar destinos para armazenamento de blob.
O exemplo de código a seguir mostra como especificar opções de transferência de dados usando o DownloadFileOptions. Os valores fornecidos neste exemplo não se destinam a ser uma recomendação. Para ajustar adequadamente esses valores, você precisa considerar as necessidades específicas do seu aplicativo.
func downloadBlobTransferOptions(client *azblob.Client, containerName string, blobName string) {
// Create or open a local file where we can download the blob
file, err := os.Create("path/to/sample/file")
handleError(err)
// Download the blob to the local file
_, err = client.DownloadFile(context.TODO(), containerName, blobName, file,
&azblob.DownloadFileOptions{
BlockSize: int64(4 * 1024 * 1024), // 4 MiB
Concurrency: uint16(2),
})
handleError(err)
}
Para saber mais sobre como ajustar as opções de transferência de dados, consulte Ajuste de desempenho para uploads e downloads com Go.
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 baixar blobs usando o módulo de clientes 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 baixar blobs usam a seguinte operação da API REST:
- Obter um blob (API REST)
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)
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.