Blobok verziószámozásának engedélyezése és kezelése

A Blob Storage verziószámozásának engedélyezésével automatikusan megtarthatja a blobok korábbi verzióit annak módosításakor vagy törlésekor. Ha a blobok verziószámozása engedélyezve van, visszaállíthatja egy blob korábbi verzióját, hogy helyreállítsa az adatokat, ha azokat hibásan módosították vagy törölték.

Ez a cikk bemutatja, hogyan engedélyezheti vagy tilthatja le a blobok verziószámozását a tárfiókhoz a Azure Portal vagy Azure Resource Manager használatával. További információ a blobok verziószámozásról: Blob verziószámozása.

Blob verziószámozásának engedélyezése

Blob verziószámozásának engedélyezése a tárfiókhoz a Azure Portal:

  1. Keresse meg a tárfiókját a portálon.
  2. A Blob service válassza az Adatvédelem lehetőséget.
  3. A Verziószámozás szakaszban válassza az Engedélyezve lehetőséget.

Képernyőkép a blobok verziószámozásának engedélyezéséről a Azure Portal

Blob módosítása új verzió aktiválása

Az alábbi példakód bemutatja, hogyan aktiválható egy új verzió létrehozása az Azure Storage .NET-hez való ügyféloldali kódtárának 12.5.1-es vagy újabb verziójával. A példa futtatása előtt győződjön meg arról, hogy engedélyezte a tárfiók verziószámozását.

A példa létrehoz egy blokkblobot, majd frissíti a blob metaadatait. A blob metaadatainak frissítése új verzió létrehozását váltja ki. A példa lekéri a kezdeti és az aktuális verziót, és azt mutatja, hogy csak az aktuális verzió tartalmazza a metaadatokat.

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

Blobverziók listája

A blobverziók vagy pillanatképek .NET v12 ügyféloldali kódtárakban való listához adja meg a BlobStates paramétert a Verzió mezővel.

Az alábbi példakód bemutatja, hogyan listhatja a blobok verzióját a .NET-hez Storage Azure Storage 12.5.1-es vagy újabb verzióval. A példa futtatása előtt győződjön meg arról, hogy engedélyezte a tárfiók verziószámozását.

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

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

Következő lépések