Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo mostra como copiar um blob de um URL de objeto de origem usando a biblioteca cliente do Armazenamento 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.
Prerequisites
- Subscrição do Azure - crie uma gratuitamente
- Conta de armazenamento do Azure - criar uma conta de armazenamento
- SDK .NET mais recente para seu sistema operacional. Certifique-se de obter o SDK e não o tempo de execução.
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 diretivas using
Adicione estas using diretivas no topo do ficheiro 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 registar um cliente de serviço para injeção de dependências numa aplicação .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.
Authorization
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), necessita-se da função interna 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 copiar blobs de uma URL de objeto de origem
A operação Put Blob From URL cria um novo blob de blocos em que o conteúdo do blob é lido de uma URL fornecida. 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, capturas instantâneas de blob, versões de blob ou quaisquer objetos acessíveis, dentro ou fora do Azure.
Quando o objeto de origem é um blob de bloco, todo o conteúdo confirmado do blob é copiado. No entanto, a lista de blocos 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, seja um existente ou um novo 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 blob e considerações de cobrança, consulte as observações em "Put Blob From URL."
Copiar um blob a partir de uma URL de objeto fonte
Esta seção fornece uma visão geral dos métodos fornecidos pela biblioteca de cliente do Azure Storage para .NET, para realizar 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*/);
}
Resources
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.
Exemplos 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:
- Enviar Blob da URL (API REST)
- Colocar Bloco a partir do URL (API REST)
Recursos da biblioteca do cliente
Conteúdo relacionado
- Este artigo é parte do guia para desenvolvedores do Armazenamento de Blobs em .NET. Para saber mais, consulte a lista completa de artigos do guia do desenvolvedor em Crie seu aplicativo .NET.