Partilhar via


Gerenciar propriedades de blob e metadados com o .NET

Além dos dados que contêm, os blobs suportam propriedades do sistema e metadados definidos pelo usuário. Este artigo mostra como gerenciar propriedades do sistema e metadados definidos pelo usuário com a biblioteca de cliente do Armazenamento do Azure para .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 trabalhar com propriedades de contêiner ou metadados. 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 as operações get e de Colaborador de Dados de Blob de Armazenamento ou superior para as operações definidas . Para saber mais, consulte as diretrizes de autorização para set Blob Properties (REST API), Get Blob Properties (REST API), set Blob Metadata (REST API) ou Get Blob Metadata (REST API).

Sobre propriedades e metadados

  • Propriedades do sistema: as propriedades do sistema existem em cada recurso de armazenamento de Blob. Alguns deles podem ser lidos ou definidos, enquanto outros são somente leitura. Sob as capas, algumas propriedades do sistema correspondem a determinados cabeçalhos HTTP padrão. A biblioteca de cliente do Armazenamento do 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. Você pode usar metadados para armazenar valores adicionais com o recurso. Os valores de metadados são apenas para seus próprios fins e não afetam como o recurso se comporta.

    Os pares nome/valor de metadados são cabeçalhos HTTP válidos e devem aderir a todas as restrições que regem os cabeçalhos HTTP. Para obter mais informações sobre requisitos de nomenclatura de metadados, consulte Nomes de metadados.

Nota

As tags de índice de Blob também fornecem a capacidade de armazenar atributos de chave/valor arbitrários definidos pelo usuário ao lado de um recurso de armazenamento de Blob do Azure. Embora semelhante aos metadados, apenas as tags de índice de blob são automaticamente indexadas e tornadas 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 a Pesquisa do Azure.

Para saber mais sobre esse recurso, consulte Gerenciar e localizar dados no armazenamento de Blob do Azure com índice de blob.

Definir e recuperar propriedades

O exemplo de código a seguir define as propriedades e ContentLanguage system ContentType em um blob.

Para definir propriedades em um blob, chame SetHttpHeaders ou SetHttpHeadersAsync. Todas as propriedades não definidas explicitamente são limpas. O exemplo de código a seguir primeiro obtém as propriedades existentes no blob e, em seguida, usa-as 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 do 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 metadados como um ou mais pares nome-valor em um recurso de blob ou contêiner. Para definir metadados, adicione pares nome-valor à Metadata coleção no recurso. Em seguida, chame um dos seguintes métodos para gravar os valores:

O exemplo de código a seguir define metadados em um blob. Um valor é definido usando o método da Add 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 em um blob.

Para recuperar metadados, chame o método GetProperties ou GetPropertiesAsync em seu blob ou contêiner para preencher a coleção de metadados e, em seguida, leia os valores, conforme mostrado no exemplo abaixo. O GetProperties método recupera propriedades de blob e metadados chamando a operação Get Blob Properties e a operação Get Blob Metadata .

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 cliente 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 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 gerenciar propriedades do sistema e metadados definidos pelo usuário usam as seguintes operações da API REST:

Recursos da biblioteca do cliente