Blobversies maken en vermelden in .NET
Met blobversiebeheer wordt automatisch een vorige versie van een blob gemaakt wanneer deze wordt gewijzigd of verwijderd. Wanneer blobversiebeheer is ingeschakeld, kunt u een eerdere versie van een blob herstellen om uw gegevens te herstellen als deze per ongeluk zijn gewijzigd of verwijderd.
Voor optimale gegevensbescherming raadt Microsoft aan om zowel versiebeheer voor blobs als voorlopig verwijderen voor uw opslagaccount in te schakelen. Zie Blob-versiebeheer en Voorlopig verwijderen voor blobs voor meer informatie.
Een blob wijzigen om een nieuwe versie te activeren
In het volgende codevoorbeeld ziet u hoe u het maken van een nieuwe versie activeert met de Azure Storage-clientbibliotheek voor .NET versie 12.5.1 of hoger. Voordat u dit voorbeeld uitvoert, moet u ervoor zorgen dat u versiebeheer hebt ingeschakeld voor uw opslagaccount.
In het voorbeeld wordt een blok-blob gemaakt en vervolgens worden de metagegevens van de blob bijgewerkt. Als u de metagegevens van de blob bijwerkt, wordt een nieuwe versie gemaakt. In het voorbeeld worden de eerste en de huidige versie opgehaald en wordt weergegeven dat alleen de huidige versie de metagegevens bevat.
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);
}
}
Blob-versies weergeven
Als u blobversies wilt weergeven, geeft u de parameter BlobStates op met het veld Version . Versies worden weergegeven van oud naar nieuw.
In het volgende codevoorbeeld ziet u hoe u blobversies weergeeft.
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;
}
}
Een eerdere blobversie over de basis-blob kopiƫren
U kunt een kopieerbewerking uitvoeren om een versie boven de basis-blob te verhogen, zolang de basis-blob zich in een onlinelaag (dynamisch of statisch) bevindt. De versie blijft behouden, maar de bestemming wordt overschreven met een kopie waarnaar kan worden gelezen en geschreven.
In het volgende codevoorbeeld ziet u hoe u een blobversie over de basis-blob kopieert:
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;
}
Resources
Zie de volgende bronnen voor meer informatie over het beheren van blobversies met behulp van de Azure Blob Storage-clientbibliotheek voor .NET.