Tworzenie migawki obiektu blob i zarządzanie nią za pomocą platformy .NET

Migawka to wersja obiektu blob tylko do odczytu wykonywana w danym momencie. W tym artykule pokazano, jak tworzyć migawki obiektów blob i zarządzać nimi przy użyciu biblioteki klienta usługi Azure Storage dla platformy .NET.

Aby uzyskać więcej informacji na temat migawek obiektów blob w usłudze Azure Storage, zobacz Migawki obiektów blob.

Wymagania wstępne

  • W tym artykule założono, że masz już skonfigurowany projekt do pracy z biblioteką klienta usługi Azure Blob Storage dla platformy .NET. Aby dowiedzieć się więcej na temat konfigurowania projektu, w tym instalacji pakietu, dodawania using dyrektyw i tworzenia autoryzowanego obiektu klienta, zobacz Rozpoczynanie pracy z usługami Azure Blob Storage i .NET.
  • Mechanizm autoryzacji musi mieć uprawnienia do pracy z migawkami obiektów blob. Aby dowiedzieć się więcej, zobacz wskazówki dotyczące autoryzacji dla następującej operacji interfejsu API REST:

Tworzenie migawki

Aby utworzyć migawkę blokowego obiektu blob, użyj jednej z następujących metod:

W poniższym przykładzie kodu pokazano, jak utworzyć migawkę. Dołącz odwołanie do biblioteki Azure.Identity , aby użyć poświadczeń firmy Microsoft w celu autoryzowania żądań do usługi. Aby uzyskać więcej informacji na temat używania klasy DefaultAzureCredential do autoryzowania tożsamości zarządzanej w celu uzyskania dostępu do usługi Azure Storage, zobacz Biblioteka klienta tożsamości platformy Azure dla platformy .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;
    }
}

Usuwanie migawek

Aby usunąć obiekt blob, należy najpierw usunąć wszystkie migawki tego obiektu blob. Migawkę można usunąć pojedynczo lub określić, że wszystkie migawki zostaną usunięte po usunięciu źródłowego obiektu blob. Jeśli spróbujesz usunąć obiekt blob, który nadal zawiera migawki, zostanie wyświetlony komunikat o błędzie.

Aby usunąć obiekt blob i jego migawki, użyj jednej z następujących metod i dołącz wyliczenie DeleteSnapshotsOption :

Poniższy przykład kodu pokazuje, jak usunąć obiekt blob i jego migawki na platformie .NET, gdzie blobClient jest obiektem typu BlobClient:

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

Kopiowanie migawki obiektu blob na podstawowy obiekt blob

Możesz wykonać operację kopiowania w celu podwyższenia poziomu migawki do podstawowego obiektu blob, o ile podstawowy obiekt blob znajduje się w warstwie online (gorąca lub chłodna). Migawka pozostaje, ale jej miejsce docelowe jest zastępowane kopią, którą można odczytać i zapisać.

Poniższy przykład kodu pokazuje, jak skopiować migawkę obiektu blob na podstawowy obiekt 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;
}

Zasoby

Aby dowiedzieć się więcej na temat zarządzania migawkami obiektów blob przy użyciu biblioteki klienta usługi Azure Blob Storage dla platformy .NET, zobacz następujące zasoby.

Aby uzyskać powiązane przykłady kodu korzystające z przestarzałych zestawów SDK platformy .NET w wersji 11.x, zobacz Przykłady kodu korzystające z platformy .NET w wersji 11.x.

Zasoby biblioteki klienta

Zobacz też