Sdílet prostřednictvím


Vytvoření a správa snímku objektu blob pomocí .NET

Snímek je verze objektu blob jen pro čtení, která se pořizuje v určitém okamžiku. Tento článek ukazuje, jak vytvářet a spravovat snímky objektů blob pomocí klientské knihovny Azure Storage pro .NET.

Další informace o snímcích objektů blob ve službě Azure Storage najdete v tématu Snímky objektů blob.

Požadavky

Nastavení prostředí

Pokud nemáte existující projekt, v této části se dozvíte, jak nastavit projekt pro práci s klientskou knihovnou Azure Blob Storage pro .NET. Kroky zahrnují instalaci balíčku, přidání using direktiv a vytvoření autorizovaného objektu klienta. Podrobnosti najdete v tématu Začínáme se službou Azure Blob Storage a .NET.

Instalace balíčků

Z adresáře projektu nainstalujte balíčky pro klientské knihovny Azure Blob Storage a Azure Identity pomocí dotnet add package příkazu. Balíček Azure.Identity je potřeba pro připojení bez hesla ke službám Azure.

dotnet add package Azure.Storage.Blobs
dotnet add package Azure.Identity

Přidání using direktiv

Na začátek souboru kódu přidejte tyto using direktivy:

using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Blobs.Specialized;

Některé příklady kódu v tomto článku mohou vyžadovat další using direktivy.

Vytvoření objektu klienta

Pokud chcete připojit aplikaci ke službě Blob Storage, vytvořte instanci BlobServiceClient. Následující příklad ukazuje, jak vytvořit objekt klienta pro DefaultAzureCredential autorizaci:

public BlobServiceClient GetBlobServiceClient(string accountName)
{
    BlobServiceClient client = new(
        new Uri($"https://{accountName}.blob.core.windows.net"),
        new DefaultAzureCredential());

    return client;
}

Klienta služby můžete zaregistrovat pro injektáž závislostí v aplikaci .NET.

Můžete také vytvořit klientské objekty pro konkrétní kontejnery nebo objekty blob. Další informace o vytváření a správě klientských objektů najdete v tématu Vytváření a správa klientských objektů, které pracují s datovými prostředky.

Autorizace

Autorizační mechanismus musí mít potřebná oprávnění pro práci se snímky objektů blob. K autorizaci pomocí Microsoft Entra ID (doporučeno) potřebujete předdefinovanou roli Přispěvatel dat objektů blob služby Azure RBAC nebo vyšší. Další informace najdete v pokynech k autorizaci objektu blob snímku.

Vytvoření snímku

Pokud chcete vytvořit snímek objektu blob bloku, použijte jednu z následujících metod:

Následující příklad kódu ukazuje, jak vytvořit snímek. Uveďte odkaz na knihovnu Azure.Identity , která používá vaše přihlašovací údaje Microsoft Entra k autorizaci požadavků na službu. Další informace o použití defaultAzureCredential třídy k autorizaci spravované identity pro přístup ke službě Azure Storage naleznete v tématu Klientská knihovna identit Azure pro .NET.

private static async Task CreateBlockBlobSnapshot(
    string accountName,
    string containerName, 
    string blobName,
    Stream data)
{
    const string blobServiceEndpointSuffix = ".blob.core.windows.net";
    Uri containerUri = 
        new Uri("https://" + accountName + blobServiceEndpointSuffix + "/" + containerName);

    // Get a container client object and create the container.
    BlobContainerClient containerClient = new BlobContainerClient(containerUri,
        new DefaultAzureCredential());
    await containerClient.CreateIfNotExistsAsync();

    // Get a blob client object.
    BlobClient blobClient = containerClient.GetBlobClient(blobName);

    try
    {
        // Upload text to create a block blob.
        await blobClient.UploadAsync(data);

        // Add blob metadata.
        IDictionary<string, string> metadata = new Dictionary<string, string>
        {
            { "ApproxBlobCreatedDate", DateTime.UtcNow.ToString() },
            { "FileType", "text" }
        };
        await blobClient.SetMetadataAsync(metadata);

        // Sleep 5 seconds.
        System.Threading.Thread.Sleep(5000);

        // Create a snapshot of the base blob.
        // You can specify metadata at the time that the snapshot is created.
        // If no metadata is specified, then the blob's metadata is copied to the snapshot.
        await blobClient.CreateSnapshotAsync();
    }
    catch (RequestFailedException e)
    {
        Console.WriteLine(e.Message);
        Console.ReadLine();
        throw;
    }
}

Odstranění snímků

Pokud chcete odstranit objekt blob, musíte nejprve odstranit všechny snímky tohoto objektu blob. Snímek můžete odstranit jednotlivě nebo určit, že se při odstranění zdrojového objektu blob odstraní všechny snímky. Pokud se pokusíte odstranit objekt blob, který stále obsahuje snímky, dojde k chybě.

Pokud chcete odstranit objekt blob a jeho snímky, použijte jednu z následujících metod a uveďte výčet DeleteSnapshotsOption :

Následující příklad kódu ukazuje, jak odstranit objekt blob a jeho snímky v .NET, kde blobClient je objekt typu BlobClient:

await blobClient.DeleteIfExistsAsync(DeleteSnapshotsOption.IncludeSnapshots, null, default);

Zkopírování snímku objektu blob přes základní objekt blob

Operaci kopírování můžete provést pro zvýšení úrovně snímku nad jeho základní objekt blob, pokud je základní objekt blob v online vrstvě (horké nebo studené). Snímek zůstane, ale jeho cíl se přepíše kopií, do které se dá číst a zapisovat.

Následující příklad kódu ukazuje, jak zkopírovat snímek objektu blob nad základní objekt blob:

public static async Task<BlockBlobClient> CopySnapshotOverBaseBlobAsync(
    BlockBlobClient client,
    string snapshotTimestamp)
{
    // Instantiate BlockBlobClient with identical URI and add snapshot timestamp
    BlockBlobClient snapshotClient = client.WithSnapshot(snapshotTimestamp);

    // Restore the specified snapshot by copying it over the base blob
    await client.SyncUploadFromUriAsync(snapshotClient.Uri, overwrite: true);

    // Return the client object after the copy operation
    return client;
}

Zdroje informací

Další informace o správě snímků objektů blob pomocí klientské knihovny služby Azure Blob Storage pro .NET najdete v následujících zdrojích informací.

Související ukázky kódu s využitím zastaralých sad .NET verze 11.x najdete v ukázkách kódu pomocí .NET verze 11.x.

Prostředky klientské knihovny

Viz také