Aktivera och hantera versionshantering av blobar

Du kan aktivera versionshantering för Blob Storage för att automatiskt underhålla tidigare versioner av en blob när den ändras eller tas bort. När versionshantering av blob är aktiverat kan du återställa en tidigare version av en blob för att återställa dina data om de ändras eller tas bort felaktigt.

Den här artikeln visar hur du aktiverar eller inaktiverar versionshantering av blobar för lagringskontot med hjälp av mallen Azure Portal eller Azure Resource Manager. Mer information om versionshantering av blobar finns i Versionshantering av blobar.

Aktivera blobversionshantering

Så här aktiverar du blobversionshantering för ett lagringskonto i Azure Portal:

  1. Gå till ditt lagringskonto i portalen.
  2. Under Blob Service väljer du Dataskydd.
  3. I avsnittet Versionshantering väljer du Aktiverad.

Screenshot showing how to enable blob versioning in Azure portal

Ändra en blob för att utlösa en ny version

Följande kodexempel visar hur du utlöser skapandet av en ny version med Azure Storage-klientbiblioteket för .NET, version 12.5.1 eller senare. Kontrollera att du har aktiverat versionshantering för ditt lagringskonto innan du kör det här exemplet.

Exemplet skapar en blockblob och uppdaterar sedan blobens metadata. När blobens metadata uppdateras skapas en ny version. Exemplet hämtar den ursprungliga versionen och den aktuella versionen och visar att endast den aktuella versionen innehåller 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);
    }
}

Lista blobversioner

Om du vill visa en lista över blobversioner eller ögonblicksbilder med .NET v12-klientbiblioteket anger du parametern BlobStates med fältet Version .

Följande kodexempel visar hur du listar blobversioner med Azure Storage-klientbiblioteket för .NET, version 12.5.1 eller senare. Kontrollera att du har aktiverat versionshantering för ditt lagringskonto innan du kör det här exemplet.

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

Nästa steg