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.

Předpoklady

  • Tento článek předpokládá, že už máte projekt nastavený tak, aby fungoval s klientskou knihovnou služby Azure Blob Storage pro .NET. Další informace o nastavení projektu, včetně instalace balíčku, přidání using direktiv a vytvoření autorizovaného objektu klienta, najdete v tématu Začínáme se službou Azure Blob Storage a .NET.
  • Autorizační mechanismus musí mít oprávnění pro práci se snímky objektů blob. Další informace najdete v pokynech k autorizaci pro následující operaci rozhraní REST API:

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é