Partilhar via


Baixar um blob com .NET

Este artigo mostra como baixar um blob usando a biblioteca de cliente do Armazenamento do Azure para .NET. Você pode baixar dados de blob para 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 ler a partir dele.

Pré-requisitos

Configurar o ambiente

Se você não tiver um projeto existente, esta seção mostra como configurar um projeto para trabalhar com a biblioteca de cliente do Armazenamento de Blobs do Azure para .NET. As etapas incluem a instalação do pacote, a adição de using diretivas 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 o Armazenamento de Blobs do Azure e as bibliotecas de cliente do Azure Identity usando o dotnet add package comando. 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

Adicionar using diretivas

Adicione estas using diretivas à parte superior do 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 adicionais using .

Criar um objeto cliente

Para conectar um aplicativo ao Armazenamento de Blob, crie uma instância de 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 de cliente para contêineres ou blobs específicos. Para saber mais sobre como criar e gerenciar objetos de cliente, consulte Criar e gerenciar objetos de cliente 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 RBAC Storage Blob Data Reader ou superior. Para saber mais, consulte as diretrizes de autorização para Obter Blob (API REST).

Transferir um blob

Você pode usar qualquer um dos seguintes métodos para baixar um blob:

Você também pode abrir um fluxo para ler a partir de um blob. O fluxo só baixa o blob à medida que o fluxo é lido. Pode utilizar um dos seguintes procedimentos:

Baixar para 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 lançará um DirectoryNotFoundException. Se o arquivo já existir no 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);
}

Transferir para um fluxo

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

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

    await blobClient.DownloadToAsync(fileStream);

    fileStream.Close();
}

Download para uma cadeia de caracteres

O exemplo a seguir pressupõe que o blob é um arquivo de texto e baixa o blob para 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 lendo 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 bloco com opções de configuração

Você pode definir opções de configuração da biblioteca do cliente 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 incluir as opções como parte de uma BlobDownloadToOptions instância. 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.

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, consulte Ajuste de desempenho para uploads e downloads.

Especificar opções de validação de transferência ao fazer 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 adulterados 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 a partir de uma instância 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 BlobDownloadToOptions objeto e especificar um algoritmo para gerar uma soma de verificação. A soma de verificação é entã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 Description
Automático 0 Recomendado. Permite que a biblioteca escolha um algoritmo. Diferentes versões de bibliotecas podem escolher algoritmos diferentes.
Nenhuma 1 Nenhum algoritmo selecionado. Não calcule nem solicite somas de verificação.
MD5 2 Algoritmo de hash MD5 padrão.
ArmazenamentoCrc64 3 CRC personalizado de 64 bits do Armazenamento do Azure.

Recursos

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

Amostras de código

Operações da API REST

O SDK do Azure para .NET 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 .NET familiares. Os métodos da biblioteca de cliente para baixar blobs usam a seguinte operação da API REST:

Recursos da biblioteca do cliente

Consulte também

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