Sdílet prostřednictvím


Vytvoření a výpis verzí objektů blob v .NET

Správa verzí objektů blob automaticky vytvoří předchozí verzi objektu blob pokaždé, když se změní nebo odstraní. Když je povolená správa verzí objektů blob, můžete obnovit starší verzi objektu blob, abyste obnovili data, pokud se chybně změnila nebo odstranila.

Pro optimální ochranu dat microsoft doporučuje povolit pro váš účet úložiště jak správu verzí objektů blob, tak obnovitelné odstranění objektů blob. Další informace najdete v tématech Správa verzí objektů blob a Obnovitelné odstranění objektů blob.

Úprava objektu blob pro aktivaci nové verze

Následující příklad kódu ukazuje, jak aktivovat vytvoření nové verze pomocí klientské knihovny Azure Storage pro .NET verze 12.5.1 nebo novější. Před spuštěním tohoto příkladu se ujistěte, že jste pro svůj účet úložiště povolili správu verzí.

Příklad vytvoří objekt blob bloku a pak aktualizuje metadata objektu blob. Aktualizace metadat objektu blob aktivuje vytvoření nové verze. Příklad načte počáteční a aktuální verzi a ukazuje, že metadata obsahuje pouze aktuální verze.

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

Výpis verzí objektů blob

Pokud chcete zobrazit seznam verzí objektů blob, zadejte parametr BlobStates s polem Version . Verze jsou uvedené od nejstarších po nejnovější.

Následující příklad kódu ukazuje, jak zobrazit seznam verzí objektů 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;
    }
}

Zkopírování předchozí verze objektu blob přes základní objekt blob

Pokud je základní objekt blob v online vrstvě (horké nebo studené), můžete provést operaci kopírování, která zvýší úroveň verze oproti základnímu objektu blob. Verze zůstane, ale její cíl je přepsán kopií, kterou lze číst a zapisovat do.

Následující příklad kódu ukazuje, jak zkopírovat verzi objektu blob přes základní objekt blob:

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

Zdroje informací

Další informace o správě verzí objektů blob pomocí klientské knihovny Azure Blob Storage pro .NET najdete v následujících zdrojích informací.

Prostředky klientské knihovny

Viz také