Gerenciar propriedades e metadados de blob com .NET
Além dos dados que eles contêm, os blobs suportam as propriedades do sistema e os metadados definidos pelo usuário. Este artigo mostra como gerenciar as propriedades do sistema e os metadados definidos pelo usuário usando a Biblioteca de clientes do Armazenamento do Microsoft Azure para .NET.
Pré-requisitos
- Assinatura do Azure - criar uma gratuitamente
- Conta de armazenamento do Azure – criar uma conta de armazenamento
- O último SDK do .NET para seu sistema operacional. Obtenha o SDK e não o runtime.
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 precisa ter as permissões necessárias para trabalhar com metadados ou propriedades de contêiner. 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 operações get e Colaborador de Dados de Blob de Armazenamento ou superior para as operações set. Para saber mais, confira as diretrizes de autorização para Definir Propriedades de Blob (API REST), Obter Propriedades de Blob (API REST), Definir Metadados de Blob (API REST) ou Obter Metadados de Blob (API REST).
Propriedades e metadados
Propriedades do sistema: existem propriedades do sistema em cada recurso de armazenamento de Blob. Algumas podem ser lidas ou definidas, enquanto outras são de somente leitura. Internamente, algumas propriedades do sistema correspondem a certos cabeçalhos HTTP padrão. A biblioteca de clientes do Armazenamento do Microsoft Azure para .NET mantém essas propriedades para você.
Metadados definidos pelo usuário: os metadados definidos pelo usuário consistem em um ou mais pares nome-valor que você especifica para um recurso de armazenamento de Blob. É possível usar os metadados para armazenar valores adicionais com o recurso. Os valores de metadados são apenas para serem usados para os objetivos que você desejar e não afetam o comportamento do recurso.
Os pares de nome/valor de metadados são cabeçalhos HTTP válidos e devem cumprir todas as restrições que regem os cabeçalhos HTTP. Para obter mais informações sobre os requisitos de nomenclatura de metadados, consulte Nomes de metadados.
Observação
As marcas de índice de blob também fornecem a capacidade de armazenar atributos de chave/valor arbitrários definidos pelo usuário junto com o recurso de armazenamento de Blobs do Azure. Embora seja semelhante aos metadados, somente as marcas de índice de blob são indexadas automaticamente e tornam-se pesquisáveis pelo serviço de blob nativo. Os metadados não podem ser indexados e consultados a menos que você utilize um serviço separado, como o Azure Search.
Para saber mais sobre esse recurso, confira Gerenciar e localizar dados no Armazenamento de Blobs do Azure usando o índice de blobs.
Definir e recuperar propriedades
O exemplo de código a seguir define as propriedades de sistema ContentType
e ContentLanguage
em um blob.
Para definir as propriedades em um blob, chame SetHttpHeaders ou SetHttpHeadersAsync. Todas as propriedades não explicitamente definidas são limpas. O exemplo de código a seguir primeiro obtém as propriedades existentes no blob e as usa para preencher os cabeçalhos que não estão sendo atualizados.
public static async Task SetBlobPropertiesAsync(BlobClient blob)
{
Console.WriteLine("Setting blob properties...");
try
{
// Get the existing properties
BlobProperties properties = await blob.GetPropertiesAsync();
BlobHttpHeaders headers = new BlobHttpHeaders
{
// Set the MIME ContentType every time the properties
// are updated or the field will be cleared
ContentType = "text/plain",
ContentLanguage = "en-us",
// Populate remaining headers with
// the pre-existing properties
CacheControl = properties.CacheControl,
ContentDisposition = properties.ContentDisposition,
ContentEncoding = properties.ContentEncoding,
ContentHash = properties.ContentHash
};
// Set the blob's properties.
await blob.SetHttpHeadersAsync(headers);
}
catch (RequestFailedException e)
{
Console.WriteLine($"HTTP error code {e.Status}: {e.ErrorCode}");
Console.WriteLine(e.Message);
Console.ReadLine();
}
}
O exemplo de código a seguir obtém as propriedades de sistema de um blob e exibe alguns dos valores.
private static async Task GetBlobPropertiesAsync(BlobClient blob)
{
try
{
// Get the blob properties
BlobProperties properties = await blob.GetPropertiesAsync();
// Display some of the blob's property values
Console.WriteLine($" ContentLanguage: {properties.ContentLanguage}");
Console.WriteLine($" ContentType: {properties.ContentType}");
Console.WriteLine($" CreatedOn: {properties.CreatedOn}");
Console.WriteLine($" LastModified: {properties.LastModified}");
}
catch (RequestFailedException e)
{
Console.WriteLine($"HTTP error code {e.Status}: {e.ErrorCode}");
Console.WriteLine(e.Message);
Console.ReadLine();
}
}
Definir e recuperar metadados
Você pode especificar os metadados como um ou mais pares de nome-valor em um recurso de contêiner ou blob. Para definir metadados, adicione os pares nome-valor à coleção Metadata
do recurso. Em seguida chame um dos seguintes métodos para gravar os valores:
O exemplo de código a seguir define os metadados em um blob. Um valor é definido usando o método Add
da coleção. O outro valor é definido usando a sintaxe implícita de chave/valor.
public static async Task AddBlobMetadataAsync(BlobClient blob)
{
Console.WriteLine("Adding blob metadata...");
try
{
IDictionary<string, string> metadata =
new Dictionary<string, string>();
// Add metadata to the dictionary by calling the Add method
metadata.Add("docType", "textDocuments");
// Add metadata to the dictionary by using key/value syntax
metadata["category"] = "guidance";
// Set the blob's metadata.
await blob.SetMetadataAsync(metadata);
}
catch (RequestFailedException e)
{
Console.WriteLine($"HTTP error code {e.Status}: {e.ErrorCode}");
Console.WriteLine(e.Message);
Console.ReadLine();
}
}
O exemplo de código a seguir lê os metadados de um blob.
Para recuperar os metadados, chame o método GetProperties ou GetPropertiesAsync no blob ou contêiner para preencher a coleção de Metadados. Depois leia os valores, conforme mostrado no exemplo abaixo. O método GetProperties
recupera propriedades e metadados de blob chamando a operação Obter Propriedades do Blob e a operação Obter Metadados de Blob.
public static async Task ReadBlobMetadataAsync(BlobClient blob)
{
try
{
// Get the blob's properties and metadata.
BlobProperties properties = await blob.GetPropertiesAsync();
Console.WriteLine("Blob metadata:");
// Enumerate the blob's metadata.
foreach (var metadataItem in properties.Metadata)
{
Console.WriteLine($"\tKey: {metadataItem.Key}");
Console.WriteLine($"\tValue: {metadataItem.Value}");
}
}
catch (RequestFailedException e)
{
Console.WriteLine($"HTTP error code {e.Status}: {e.ErrorCode}");
Console.WriteLine(e.Message);
Console.ReadLine();
}
}
Recursos
Para saber mais sobre como gerenciar propriedades do sistema e metadados definidos pelo usuário usando a biblioteca de clientes do Armazenamento de Blobs do Azure para .NET, consulte os recursos a seguir.
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 gerenciar propriedades do sistema e metadados definidos pelo usuário usam as seguintes operações de API REST:
- Definir propriedades de blob (API REST)
- Obter propriedades de blob (API REST)
- Definir metadados de blob (API REST)
- Obter metadados de blob (API REST)
Recursos da biblioteca de clientes
- Documentação de referência da biblioteca de clientes
- Código-fonte da biblioteca de clientes
- Pacote (NuGet)
Conteúdo relacionado
- 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.