Dela via


Hantera blobegenskaper och metadata med .NET

Förutom de data som de innehåller stöder blobar systemegenskaper och användardefinierade metadata. Den här artikeln visar hur du hanterar systemegenskaper och användardefinierade metadata med Azure Storage-klientbiblioteket för .NET.

Förutsättningar

  • Den här artikeln förutsätter att du redan har ett projekt konfigurerat för att fungera med Azure Blob Storage-klientbiblioteket för .NET. Mer information om hur du konfigurerar projektet, inklusive paketinstallation, tillägg using av direktiv och skapande av ett auktoriserat klientobjekt finns i Kom igång med Azure Blob Storage och .NET.
  • Auktoriseringsmekanismen måste ha behörighet att arbeta med blobegenskaper eller metadata. Mer information finns i auktoriseringsvägledningen för följande REST API-åtgärder:

Om egenskaper och metadata

  • Systemegenskaper: Systemegenskaper finns på varje Blob Storage-resurs. Vissa av dem kan läsas eller ställas in, medan andra är skrivskyddade. Under täcket motsvarar vissa systemegenskaper vissa standard-HTTP-huvuden. Azure Storage-klientbiblioteket för .NET underhåller dessa egenskaper åt dig.

  • Användardefinierade metadata: Användardefinierade metadata består av ett eller flera namn/värde-par som du anger för en Blob Storage-resurs. Du kan använda metadata för att lagra ytterligare värden med resursen. Metadatavärden är endast för dina egna syften och påverkar inte hur resursen beter sig.

    Metadatanamn/värdepar är giltiga HTTP-huvuden och bör följa alla begränsningar som styr HTTP-huvuden. Mer information om namngivningskrav för metadata finns i Metadatanamn.

Kommentar

Blobindextaggar ger också möjlighet att lagra godtyckliga användardefinierade nyckel-/värdeattribut tillsammans med en Azure Blob Storage-resurs. Även om det liknar metadata indexeras endast blobindextaggar automatiskt och görs sökbara av den interna blobtjänsten. Metadata kan inte indexeras och frågas om du inte använder en separat tjänst, till exempel Azure Search.

Mer information om den här funktionen finns i Hantera och hitta data på Azure Blob Storage med blobindex.

Ange och hämta egenskaper

I följande kodexempel anges systemegenskaperna ContentType och ContentLanguage på en blob.

Om du vill ange egenskaper för en blob anropar du SetHttpHeaders eller SetHttpHeadersAsync. Alla egenskaper som inte uttryckligen anges rensas. Följande kodexempel hämtar först de befintliga egenskaperna på blobben och använder dem sedan för att fylla i rubrikerna som inte uppdateras.

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();
    }
}

I följande kodexempel hämtas en blobs systemegenskaper och några av värdena visas.

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();
    }
}

Ange och hämta metadata

Du kan ange metadata som ett eller flera namn/värde-par på en blob- eller containerresurs. Om du vill ange metadata lägger du till namn/värde-par i Metadata samlingen på resursen. Anropa sedan någon av följande metoder för att skriva värdena:

I följande kodexempel anges metadata på en blob. Ett värde anges med hjälp av samlingens Add metod. Det andra värdet anges med implicit nyckel-/värdesyntax.

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();
    }
}

I följande kodexempel läss metadata på en blob.

Om du vill hämta metadata anropar du metoden GetProperties eller GetPropertiesAsync på din blob eller container för att fylla i metadatasamlingen och läser sedan värdena, som du ser i exemplet nedan. Metoden GetProperties hämtar blobegenskaper och metadata genom att anropa både åtgärden Hämta blobegenskaper och åtgärden Hämta blobmetadata .

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();
    }
}

Resurser

Mer information om hur du hanterar systemegenskaper och användardefinierade metadata med hjälp av Azure Blob Storage-klientbiblioteket för .NET finns i följande resurser.

REST API-åtgärder

Azure SDK för .NET innehåller bibliotek som bygger på Azure REST API, så att du kan interagera med REST API-åtgärder via välbekanta .NET-paradigm. Klientbiblioteksmetoderna för att hantera systemegenskaper och användardefinierade metadata använder följande REST API-åtgärder:

Klientbiblioteksresurser