Carregar um blob de bloco com Go
Este artigo mostra como carregar um blob usando o módulo de cliente de Armazenamento do Azure para Go. Você pode carregar dados para um blob de bloco a partir de um caminho de arquivo, um fluxo, um objeto binário ou uma cadeia de caracteres de texto. Você também pode carregar blobs com tags de índice.
Pré-requisitos
- Subscrição do Azure - crie uma gratuitamente
- Conta de armazenamento do Azure - criar uma conta de armazenamento
- Ir 1.18+
Configurar o ambiente
Se você não tiver um projeto existente, esta seção mostra como configurar um projeto para trabalhar com o módulo de cliente de Armazenamento de Blob do Azure para Go. As etapas incluem a instalação do módulo, a adição de import
caminhos e a criação de um objeto de 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 azidentity
módulo usando o seguinte comando:
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 exemplos de uso, consulte Exemplos de código.
Criar um objeto cliente
Para conectar um aplicativo ao Armazenamento de Blob, 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 carregar um blob. Para autorização com o Microsoft Entra ID (recomendado), você precisa da função interna do RBAC do Azure RBAC Storage Blob Data Contributor ou superior. Para saber mais, consulte as diretrizes de autorização para Put Blob (REST API) e Put Block (REST API).
Carregar dados para um blob de bloco
Para carregar um blob, chame qualquer um dos seguintes métodos do objeto cliente:
Para executar o carregamento, a biblioteca do cliente pode usar Put Blob ou uma série de chamadas Put Block seguidas de Put Block List
. Esse comportamento depende do tamanho geral do objeto e como as opções de transferência de dados são definidas.
Carregar um blob de bloco a partir de um caminho de arquivo local
O exemplo a seguir carrega um arquivo local para um blob de bloco:
func uploadBlobFile(client *azblob.Client, containerName string, blobName string) {
// Open the file for reading
file, err := os.OpenFile("path/to/sample/file", os.O_RDONLY, 0)
handleError(err)
defer file.Close()
// Upload the file to the specified container with the specified blob name
_, err = client.UploadFile(context.TODO(), containerName, blobName, file, nil)
handleError(err)
}
Carregar um blob de bloco a partir de um fluxo
O exemplo a seguir cria uma Reader
instância e lê de uma cadeia de caracteres como se fosse um fluxo de bytes. O fluxo é então carregado para um blob de bloco:
func uploadBlobStream(client *azblob.Client, containerName string, blobName string) {
data := "Hello, world!"
blobContentReader := strings.NewReader(data)
// Upload the file to the specified container with the specified blob name
_, err := client.UploadStream(context.TODO(), containerName, blobName, blobContentReader, nil)
handleError(err)
}
Carregar dados binários para um blob de bloco
O exemplo a seguir carrega dados binários para um blob de bloco:
func uploadBlobBuffer(client *azblob.Client, containerName string, blobName string) {
// Create a buffer with the content of the file to upload
data := []byte("Hello, world!")
// Upload the data to a block blob
_, err := client.UploadBuffer(context.TODO(), containerName, blobName, data, nil)
handleError(err)
}
Carregar um blob de bloco com tags de índice
O exemplo a seguir carrega um blob de bloco com tags de índice:
func uploadBlobWithIndexTags(client *azblob.Client, containerName string, blobName string) {
// Create a buffer with the content of the file to upload
data := []byte("Hello, world!")
// Upload the data to a block blob with index tags
_, err := client.UploadBuffer(context.TODO(), containerName, blobName, data, &azblob.UploadBufferOptions{
Tags: map[string]string{
"key1": "value1",
"key2": "value2",
},
})
handleError(err)
}
Carregar um blob de bloco com opções de configuração
Você pode definir opções de configuração da biblioteca do cliente ao carregar um blob. Essas opções podem ser ajustadas para melhorar o desempenho, aumentar a confiabilidade e otimizar os custos. Os exemplos de código a seguir mostram como definir opções de configuração para uma operação de carregamento.
Especificar opções de transferência de dados para upload
Você pode definir opções de configuração ao carregar um blob para otimizar o desempenho. As seguintes opções de configuração estão disponíveis para operações de carregamento:
BlockSize
: O tamanho de cada bloco ao carregar um blob de bloco. O valor padrão é 4 MB.Concurrency
: O número máximo de conexões paralelas a serem usadas durante o upload. O valor padrão é 5.
Essas opções de configuração estão disponíveis ao carregar usando os seguintes métodos:
O método Upload não suporta essas opções e carrega dados em uma única solicitação.
Para obter mais informações sobre limites de tamanho de transferência para armazenamento de Blob, consulte Dimensionar destinos para armazenamento de Blob.
O exemplo de código a seguir mostra como especificar opções de transferência de dados usando o UploadFileOptions. Os valores fornecidos neste exemplo não pretendem ser uma recomendação. Para ajustar corretamente esses valores, você precisa considerar as necessidades específicas do seu aplicativo.
func uploadBlobWithTransferOptions(client *azblob.Client, containerName string, blobName string) {
// Open the file for reading
file, err := os.OpenFile("path/to/sample/file", os.O_RDONLY, 0)
handleError(err)
defer file.Close()
// Upload the data to a block blob with transfer options
_, err = client.UploadFile(context.TODO(), containerName, blobName, file,
&azblob.UploadFileOptions{
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 o Go.
Nota
Os exemplos de código neste guia destinam-se a ajudá-lo a começar a usar o Azure Blob Storage and Go. Você deve modificar o tratamento de erros e Context
os valores para atender às necessidades do seu aplicativo.
Recursos
Para saber mais sobre como carregar blobs usando o módulo de cliente do Armazenamento de Blobs do Azure para Go, consulte os recursos a seguir.
Amostras de código
- Exibir exemplos de código deste artigo (GitHub)
Operações da API REST
O SDK do Azure para Go contém bibliotecas que se baseiam na API REST do Azure, permitindo que você interaja com operações da API REST por meio de paradigmas Go familiares. Os métodos da biblioteca de cliente para carregar blobs usam as seguintes operações de API REST:
- Colocar Blob (API REST)
- Colocar bloco (API REST)
Recursos do módulo cliente
Consulte também
- Gerenciar e localizar dados de Blob do Azure com tags de índice de blob
- Usar marcas de índice de blob para gerenciar e localizar dados no Armazenamento de Blobs do Azure
Conteúdos relacionados
- Este artigo faz parte do guia do desenvolvedor do Blob Storage para Go. Para saber mais, consulte a lista completa de artigos do guia do desenvolvedor em Crie seu aplicativo Go.