Bagikan melalui


Membuat dan mencantumkan versi blob di .NET

Penerapan versi blob secara otomatis membuat versi blob sebelumnya kapan saja dimodifikasi atau dihapus. Saat penerapan versi blob diaktifkan, lalu Anda dapat memulihkan versi blob sebelumnya untuk memulihkan data jika blob diubah atau dihapus secara keliru.

Untuk perlindungan data yang optimal, Microsoft merekomendasikan untuk mengaktifkan penerapan versi blob dan penghapusan sementara blob untuk akun penyimpanan Anda. Untuk informasi selengkapnya, lihat Penerapan versi blob dan Penghapusan sementara untuk blob.

Mengubah blob untuk memicu versi baru

Contoh kode berikut menunjukkan cara memicu pembuatan versi baru dengan pustaka klien Penyimpanan Azure untuk .NET, versi 12.5.1 atau yang lebih baru. Sebelum menjalankan contoh ini, pastikan Anda telah mengaktifkan penerapan versi untuk akun penyimpanan Anda.

Contohnya membuat blob blok, lalu memperbarui metadata blob. Memperbarui metadata blob memicu pembuatan versi baru. Contoh ini mengambil versi awal dan versi saat ini, dan menunjukkan bahwa hanya versi saat ini yang menyertakan metadata.

public static async Task UpdateVersionedBlobMetadata(BlobContainerClient blobContainerClient, 
                                                     string blobName)
{
    try
    {
        // Create the container.
        await blobContainerClient.CreateIfNotExistsAsync();

        // Upload a block blob.
        BlockBlobClient blockBlobClient = blobContainerClient.GetBlockBlobClient(blobName);

        string blobContents = string.Format("Block blob created at {0}.", DateTime.Now);
        byte[] byteArray = Encoding.ASCII.GetBytes(blobContents);

        string initalVersionId;
        using (MemoryStream stream = new MemoryStream(byteArray))
        {
            Response<BlobContentInfo> uploadResponse = 
                await blockBlobClient.UploadAsync(stream, null, default);

            // Get the version ID for the current version.
            initalVersionId = uploadResponse.Value.VersionId;
        }

        // Update the blob's metadata to trigger the creation of a new version.
        Dictionary<string, string> metadata = new Dictionary<string, string>
        {
            { "key", "value" },
            { "key1", "value1" }
        };

        Response<BlobInfo> metadataResponse = 
            await blockBlobClient.SetMetadataAsync(metadata);

        // Get the version ID for the new current version.
        string newVersionId = metadataResponse.Value.VersionId;

        // Request metadata on the previous version.
        BlockBlobClient initalVersionBlob = blockBlobClient.WithVersion(initalVersionId);
        Response<BlobProperties> propertiesResponse = await initalVersionBlob.GetPropertiesAsync();
        PrintMetadata(propertiesResponse);

        // Request metadata on the current version.
        BlockBlobClient newVersionBlob = blockBlobClient.WithVersion(newVersionId);
        Response<BlobProperties> newPropertiesResponse = await newVersionBlob.GetPropertiesAsync();
        PrintMetadata(newPropertiesResponse);
    }
    catch (RequestFailedException e)
    {
        Console.WriteLine(e.Message);
        Console.ReadLine();
        throw;
    }
}

static void PrintMetadata(Response<BlobProperties> propertiesResponse)
{
    if (propertiesResponse.Value.Metadata.Count > 0)
    {
        Console.WriteLine("Metadata values for version {0}:", propertiesResponse.Value.VersionId);
        foreach (var item in propertiesResponse.Value.Metadata)
        {
            Console.WriteLine("Key:{0}  Value:{1}", item.Key, item.Value);
        }
    }
    else
    {
        Console.WriteLine("Version {0} has no metadata.", propertiesResponse.Value.VersionId);
    }
}

Daftar versi blob

Untuk mencantumkan versi blob, tentukan parameter BlobStates dengan bidang Versi . Versi dicantumkan dari yang terlama ke terbaru.

Contoh kode berikut menunjukkan cara mencantumkan versi blob.

private static void ListBlobVersions(BlobContainerClient blobContainerClient, 
                                           string blobName)
{
    try
    {
        // Call the listing operation, specifying that blob versions are returned.
        // Use the blob name as the prefix. 
        var blobVersions = blobContainerClient.GetBlobs
            (BlobTraits.None, BlobStates.Version, prefix: blobName)
            .OrderByDescending(version => version.VersionId).Where(blob => blob.Name == blobName);

        // Construct the URI for each blob version.
        foreach (var version in blobVersions)
        {
            BlobUriBuilder blobUriBuilder = new BlobUriBuilder(blobContainerClient.Uri)
            {
                BlobName = version.Name,
                VersionId = version.VersionId
            };

            if ((bool)version.IsLatestVersion.GetValueOrDefault())
            {
                Console.WriteLine("Current version: {0}", blobUriBuilder);
            }
            else
            {
                Console.WriteLine("Previous version: {0}", blobUriBuilder);
            }
        }
    }
    catch (RequestFailedException e)
    {
        Console.WriteLine(e.Message);
        Console.ReadLine();
        throw;
    }
}

Menyalin versi blob sebelumnya melalui blob dasar

Anda dapat melakukan operasi salin untuk mempromosikan versi melalui blob dasarnya, selama blob dasar berada di tingkat online (panas atau dingin). Versi tetap ada, tetapi tujuannya ditimpa dengan salinan yang dapat dibaca dan ditulis.

Contoh kode berikut menunjukkan cara menyalin versi blob melalui blob dasar:

public static async Task<BlockBlobClient> CopyVersionOverBaseBlobAsync(
    BlockBlobClient client,
    string versionTimestamp)
{
    // Instantiate BlobClient with identical URI and add version timestamp
    BlockBlobClient versionClient = client.WithVersion(versionTimestamp);

    // Restore the specified version by copying it over the base blob
    await client.SyncUploadFromUriAsync(versionClient.Uri);

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

Sumber

Untuk mempelajari selengkapnya tentang mengelola versi blob menggunakan pustaka klien Azure Blob Storage untuk .NET, lihat sumber daya berikut ini.

Sumber daya pustaka klien

Lihat juga