Partilhar via


Copiar um blob de uma URL de objeto de origem com .NET

Este artigo mostra como copiar um blob de uma URL de objeto de origem usando a biblioteca de cliente do Armazenamento do Azure para .NET. Você pode copiar um blob de uma fonte dentro da mesma conta de armazenamento, de uma fonte em uma conta de armazenamento diferente ou de qualquer objeto acessível recuperado via solicitação HTTP GET em uma determinada URL.

Os métodos de biblioteca de cliente abordados neste artigo usam as operações Put Blob From URL e Put Block From URL REST API. Esses métodos são preferidos para cenários de cópia em que você deseja mover dados para uma conta de armazenamento e ter uma URL para o objeto de origem. Para operações de cópia em que você deseja agendamento assíncrono, consulte Copiar um blob com agendamento assíncrono usando o .NET.

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 cópia. 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 From URL (REST API) ou Put Block From URL (REST API).

Sobre a cópia de blobs de uma URL de objeto de origem

A Put Blob From URL operação cria um novo blob de bloco onde o conteúdo do blob é lido de uma determinada URL. A operação é concluída de forma síncrona.

A fonte pode ser qualquer objeto recuperável através de uma solicitação HTTP GET padrão na URL fornecida. Isso inclui blobs de bloco, blobs de acréscimo, blobs de página, instantâneos de blob, versões de blob ou qualquer objeto acessível dentro ou fora do Azure.

Quando o objeto de origem é um blob de bloco, todo o conteúdo de blob confirmado é copiado. No entanto, a lista de bloqueios não é preservada e os blocos não confirmados não são copiados. O conteúdo do blob de destino é idêntico ao da origem, mas a lista de bloqueios confirmada não é preservada.

O destino é sempre um blob de bloco, um blob de bloco existente ou um novo blob de bloco criado pela operação. O conteúdo de um blob existente é substituído pelo conteúdo do novo blob.

A Put Blob From URL operação sempre copia todo o blob de origem. Não há suporte para copiar um intervalo de bytes ou um conjunto de blocos. Para executar atualizações parciais no conteúdo de um blob de bloqueio usando uma URL de origem, use a API Put Block From URL junto com Put Block List.

Para saber mais sobre a operação, incluindo limitações de tamanho de Put Blob From URL blob e considerações de cobrança, consulte Colocar Blob a partir de observações de URL.

Copiar um blob de uma URL de objeto de origem

Esta seção fornece uma visão geral dos métodos fornecidos pela biblioteca de cliente do Armazenamento do Azure para .NET executar uma operação de cópia de uma URL de objeto de origem.

Os métodos a seguir encapsulam a operação Put Blob From URL REST API e criam um novo blob de bloco onde o conteúdo do blob é lido de uma determinada URL:

Esses métodos são preferidos para cenários em que você deseja mover dados para uma conta de armazenamento e ter uma URL para o objeto de origem.

Para objetos grandes, você pode optar por trabalhar com blocos individuais. Os métodos a seguir encapsulam a operação Put Block From URL REST API. Esses métodos criam um novo bloco a ser confirmado como parte de um blob onde o conteúdo é lido de uma URL de origem:

Copiar um blob de uma fonte no Azure

Se estiver a copiar um blob de uma origem no Azure, o acesso ao blob de origem pode ser autorizado através do Microsoft Entra ID, de uma assinatura de acesso partilhado (SAS) ou de uma chave de conta.

O exemplo a seguir mostra um cenário para copiar de um blob de origem no Azure. O método SyncUploadFromUriAsync pode, opcionalmente, aceitar um parâmetro Boolean para indicar se um blob existente deve ser substituído, conforme mostrado no exemplo. O overwrite parâmetro assume como padrão false.

//-------------------------------------------------
// Copy a blob from the same storage account
//-------------------------------------------------
public static async Task CopyWithinStorageAccountAsync(
    BlobClient sourceBlob,
    BlockBlobClient destinationBlob)
{
    // Get the source blob URI and create the destination blob
    // overwrite param defaults to false
    await destinationBlob.SyncUploadFromUriAsync(sourceBlob.Uri/*, overwrite: false*/);
}

O método SyncUploadFromUriAsync também pode aceitar um parâmetro BlobSyncUploadFromUriOptions para especificar outras opções para a operação.

Copiar um blob de uma fonte fora do Azure

Você pode executar uma operação de cópia em qualquer objeto de origem que possa ser recuperado por meio da solicitação HTTP GET em uma determinada URL, incluindo objetos acessíveis fora do Azure. O exemplo a seguir mostra um cenário para copiar um blob de uma URL de objeto de origem acessível.

//-------------------------------------------------
// Copy a blob from an external source
//-------------------------------------------------
public static async Task CopyFromExternalSourceAsync(
    string sourceLocation,
    BlockBlobClient destinationBlob)
{
    Uri sourceUri = new(sourceLocation);

    // Create the destination blob from the source URL
    // overwrite param defaults to false
    await destinationBlob.SyncUploadFromUriAsync(sourceUri/*, overwrite: false*/);
}

Recursos

Para saber mais sobre como copiar 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 de biblioteca de cliente abordados neste artigo usam as seguintes operações de API REST:

Recursos da biblioteca do cliente

  • 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.