Skapa och hantera en blobögonblicksbild med .NET

En ögonblicksbild är en skrivskyddad version av en blob som tas vid en tidpunkt. Den här artikeln visar hur du skapar och hanterar blobögonblicksbilder med hjälp av Azure Storage-klientbiblioteket för .NET.

Mer information om blobögonblicksbilder i Azure Storage finns i Blob-ögonblicksbilder.

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 blobögonblicksbilder. Mer information finns i auktoriseringsvägledningen för följande REST API-åtgärd:

Skapa en ögonblicksbild

Om du vill skapa en ögonblicksbild av en blockblob använder du någon av följande metoder:

I följande kodexempel visas hur du skapar en ögonblicksbild. Inkludera en referens till Azure.Identity-biblioteket för att använda dina Microsoft Entra-autentiseringsuppgifter för att auktorisera begäranden till tjänsten. Mer information om hur du använder klassen DefaultAzureCredential för att auktorisera en hanterad identitet för åtkomst till Azure Storage finns i Azure Identity-klientbiblioteket för .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;
    }
}

Ta bort ögonblicksbilder

Om du vill ta bort en blob måste du först ta bort alla ögonblicksbilder av den bloben. Du kan ta bort en ögonblicksbild individuellt eller ange att alla ögonblicksbilder ska tas bort när källbloben tas bort. Om du försöker ta bort en blob som fortfarande har ögonblicksbilder resulterar ett fel.

Om du vill ta bort en blob och dess ögonblicksbilder använder du någon av följande metoder och inkluderar uppräkningen DeleteSnapshotsOption :

I följande kodexempel visas hur du tar bort en blob och dess ögonblicksbilder i .NET, där blobClient är ett objekt av typen BlobClient:

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

Kopiera en blobögonblicksbild över basbloben

Du kan utföra en kopieringsåtgärd för att höja upp en ögonblicksbild över dess basblob, så länge basbloben är på en onlinenivå (frekvent eller lågfrekvent). Ögonblicksbilden finns kvar, men målet skrivs över med en kopia som kan läsas och skrivas till.

Följande kodexempel visar hur du kopierar en blobögonblicksbild över basbloben:

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

Resurser

Mer information om hur du hanterar blobögonblicksbilder med hjälp av Azure Blob Storage-klientbiblioteket för .NET finns i följande resurser.

Relaterade kodexempel med inaktuella .NET version 11.x SDK:er finns i Kodexempel med .NET version 11.x.

Klientbiblioteksresurser

Se även