Baixar um blob com .NET

Este artigo mostra como baixar um blob usando a biblioteca de clientes de Armazenamento do Microsoft Azure para .NET. Você pode baixar dados de blob em vários destinos, incluindo um caminho de arquivo local, fluxo ou cadeia de caracteres de texto. Você também pode abrir um fluxo de blob e lê-lo.

Pré-requisitos

Configure seu ambiente

Se você não tiver um projeto existente, esta seção mostrará como configurar um projeto para funcionar com a biblioteca de clientes do Armazenamento de Blobs do Azure para .NET. As etapas incluem a instalação do pacote, a adição de diretivas using e a criação de um objeto de cliente autorizado. Para obter detalhes, consulte Introdução ao Armazenamento de Blobs do Azure e ao .NET.

Instalar Pacotes

No diretório do projeto, instale pacotes para as bibliotecas de cliente do Armazenamento de Blobs do Azure e do Azure Identity usando o comando dotnet add package. O pacote Azure.Identity é necessário para conexões sem senha com os serviços do Azure.

dotnet add package Azure.Storage.Blobs
dotnet add package Azure.Identity

Adicione diretivas using

Adicione essas diretivas using ao topo do seu arquivo de código:

using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Blobs.Specialized;

Alguns exemplos de código neste artigo podem exigir diretivas using adicionais.

Criar um objeto cliente

Para conectar um aplicativo ao Armazenamento de Blobs, crie uma instância do BlobServiceClient. O exemplo a seguir mostra como criar um objeto cliente usando DefaultAzureCredential para autorização:

public BlobServiceClient GetBlobServiceClient(string accountName)
{
    BlobServiceClient client = new(
        new Uri($"https://{accountName}.blob.core.windows.net"),
        new DefaultAzureCredential());

    return client;
}

Você pode registrar um cliente de serviço para injeção de dependência em um aplicativo .NET.

Você também pode criar objetos cliente para contêineres ou blobs específicos. Para saber mais sobre como criar e gerenciar objetos clientes, confira Criar e gerenciar objetos clientes que interagem com recursos de dados.

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:

Abra também um fluxo para fazer a leitura de um blob. O fluxo só baixa o blob à medida que o fluxo é lido. Você pode usar um dos seguintes métodos:

Download em um caminho de arquivo

O exemplo a seguir baixa um blob para um caminho de arquivo local. Se o diretório especificado não existir, o código gerará um DirectoryNotFoundException. Se o arquivo já existir em localFilePath, ele será substituído por padrão durante os downloads subsequentes.

public static async Task DownloadBlobToFileAsync(
    BlobClient blobClient,
    string localFilePath)
{
    await blobClient.DownloadToAsync(localFilePath);
}

Download em um fluxo

O exemplo a seguir baixa um blob criando um objeto Stream e, em seguida, baixa nesse fluxo. Se o diretório especificado não existir, o código gerará um DirectoryNotFoundException.

public static async Task DownloadBlobToStreamAsync(
    BlobClient blobClient,
    string localFilePath)
{
    FileStream fileStream = File.OpenWrite(localFilePath);

    await blobClient.DownloadToAsync(fileStream);

    fileStream.Close();
}

Download em uma cadeia de caracteres

O exemplo a seguir pressupõe que o blob é um arquivo de texto e baixa o blob em uma cadeia de caracteres:

public static async Task DownloadBlobToStringAsync(BlobClient blobClient)
{
    BlobDownloadResult downloadResult = await blobClient.DownloadContentAsync();
    string blobContents = downloadResult.Content.ToString();
}

Download de um fluxo

O exemplo a seguir baixa um blob fazendo a leitura de um fluxo:

public static async Task DownloadBlobFromStreamAsync(
    BlobClient blobClient,
    string localFilePath)
{
    using (var stream = await blobClient.OpenReadAsync())
    {
        FileStream fileStream = File.OpenWrite(localFilePath);
        await stream.CopyToAsync(fileStream);
    }
}

Baixar um blob de blocos com opções de configuração

Você pode definir as opções de configuração da biblioteca de clientes ao baixar um blob. Essas opções podem ser ajustadas para melhorar o desempenho e aumentar a confiabilidade. Os exemplos de código a seguir mostram como usar BlobDownloadToOptions para definir opções de configuração ao chamar um método de download. Observe que as mesmas opções estão disponíveis para BlobDownloadOptions.

Especificar opções de transferência de dados durante o download

Você pode configurar os valores em StorageTransferOptions para melhorar o desempenho das operações de transferência de dados. O exemplo de código a seguir mostra como definir valores para StorageTransferOptions e inclui as opções como parte de uma instância BlobDownloadToOptions. 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.

public static async Task DownloadBlobWithTransferOptionsAsync(
    BlobClient blobClient,
    string localFilePath)
{
    FileStream fileStream = File.OpenWrite(localFilePath);

    var transferOptions = new StorageTransferOptions
    {
        // Set the maximum number of parallel transfer workers
        MaximumConcurrency = 2,

        // Set the initial transfer length to 8 MiB
        InitialTransferSize = 8 * 1024 * 1024,

        // Set the maximum length of a transfer to 4 MiB
        MaximumTransferSize = 4 * 1024 * 1024
    };

    BlobDownloadToOptions downloadOptions = new BlobDownloadToOptions()
    {
        TransferOptions = transferOptions
    };

    await blobClient.DownloadToAsync(fileStream, downloadOptions);

    fileStream.Close();
}

Para saber mais sobre como ajustar as opções de transferência de dados, confira Ajuste de desempenho para uploads e downloads.

Especificar opções de validação de transferência durante o download

Você pode especificar opções de validação de transferência para ajudar a garantir que os dados sejam baixados corretamente e não tenham sido alterados durante o trânsito. As opções de validação de transferência podem ser definidas no nível do cliente usando BlobClientOptions, que aplica opções de validação a todos os métodos chamados de uma instância de BlobClient.

Você também pode substituir as opções de validação de transferência no nível do método usando BlobDownloadToOptions. O exemplo de código a seguir mostra como criar um objeto BlobDownloadToOptions e especificar um algoritmo para gerar uma soma de verificação. Em seguida, a soma de verificação é usada pelo serviço para verificar a integridade dos dados do conteúdo baixado.

public static async Task DownloadBlobWithChecksumAsync(
    BlobClient blobClient,
    string localFilePath)
{
    FileStream fileStream = File.OpenWrite(localFilePath);

    var validationOptions = new DownloadTransferValidationOptions
    {
        AutoValidateChecksum = true,
        ChecksumAlgorithm = StorageChecksumAlgorithm.Auto
    };

    BlobDownloadToOptions downloadOptions = new BlobDownloadToOptions()
    {
        TransferValidation = validationOptions
    };

    await blobClient.DownloadToAsync(fileStream, downloadOptions);

    fileStream.Close();
}

A tabela a seguir mostra as opções disponíveis para o algoritmo de soma de verificação, conforme definido por StorageChecksumAlgorithm:

Nome Valor Descrição
Auto 0 Recomendável. Permite que a biblioteca escolha um algoritmo. Versões de biblioteca diferentes podem escolher algoritmos diferentes.
Nenhum 1 Nenhum algoritmo selecionado. Não calcule nem solicite somas de verificação.
MD5 2 Algoritmo de hash MD5 padrão.
StorageCrc64 3 CRC de 64 bits personalizado do Armazenamento do Microsoft Azure.

Recursos

Para saber mais sobre como baixar blobs usando a biblioteca de clientes de Armazenamento de Blobs do Azure para .NET, consulte os seguintes recursos.

Exemplos de código

Operações da API REST

O SDK do Azure para .NET contém bibliotecas que criam sobre a API REST do Azure, permitindo a interação com as operações de API REST por meio de paradigmas conhecidos do .NET. Os métodos da biblioteca de clientes para baixar blobs usam a seguinte operação da API REST:

Recursos da biblioteca de clientes

Confira também

  • Este artigo faz parte do guia para desenvolvedores do Armazenamento de Blobs para .NET. Para saber mais, veja a lista completa de artigos do guia do desenvolvedor em Criar seu aplicativo .NET.