你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 .NET 创建和管理 Blob 快照
快照是在某一时间点拍摄的只读版本的 Blob。 本文介绍如何使用适用于 .NET 的 Azure 存储客户端库创建和管理 blob 快照。
有关 Azure 存储中 blob 快照的详细信息,请参阅 Blob 快照。
先决条件
- 本文假设已经设置了项目来使用适用于 .NET 的 Azure Blob 存储客户端库。 要了解有关设置项目的信息,包括包安装、添加
using
指令和创建授权客户端对象,请参阅开始使用 Azure Blob 存储和 .NET。 - 授权机制必须具有使用 blob 快照的权限。 若要了解详细信息,请参阅有关以下 REST API 操作的授权指导:
创建快照
若要创建块 blob 的快照,请使用以下方法之一:
以下代码示例演示如何创建快照。 包含对 Azure.Identity 库的引用,以使用 Microsoft Entra 凭据授权对服务的请求。 若要详细了解如何使用 DefaultAzureCredential 类来授权托管标识访问 Azure 存储,请参阅适用于 .NET 的 Azure 标识客户端库。
private static async Task CreateBlockBlobSnapshot(
string accountName,
string containerName,
string blobName,
Stream data)
{
const string blobServiceEndpointSuffix = ".blob.core.windows.net";
Uri containerUri =
new Uri("https://" + accountName + blobServiceEndpointSuffix + "/" + containerName);
// Get a container client object and create the container.
BlobContainerClient containerClient = new BlobContainerClient(containerUri,
new DefaultAzureCredential());
await containerClient.CreateIfNotExistsAsync();
// Get a blob client object.
BlobClient blobClient = containerClient.GetBlobClient(blobName);
try
{
// Upload text to create a block blob.
await blobClient.UploadAsync(data);
// Add blob metadata.
IDictionary<string, string> metadata = new Dictionary<string, string>
{
{ "ApproxBlobCreatedDate", DateTime.UtcNow.ToString() },
{ "FileType", "text" }
};
await blobClient.SetMetadataAsync(metadata);
// Sleep 5 seconds.
System.Threading.Thread.Sleep(5000);
// Create a snapshot of the base blob.
// You can specify metadata at the time that the snapshot is created.
// If no metadata is specified, then the blob's metadata is copied to the snapshot.
await blobClient.CreateSnapshotAsync();
}
catch (RequestFailedException e)
{
Console.WriteLine(e.Message);
Console.ReadLine();
throw;
}
}
删除快照
若要删除 blob,必须先删除该 blob 的所有快照。 可以单独删除快照,或指定在删除源 Blob 时删除所有快照。 如果尝试删除仍包含快照的 Blob,会发生错误。
若要删除 blob 及其快照,请使用以下方法之一,并包括 DeleteSnapshotsOption 枚举:
以下代码示例演示如何在 .NET 中删除 blob 及其快照,其中 blobClient
是 BlobClient 类型的对象:
await blobClient.DeleteIfExistsAsync(DeleteSnapshotsOption.IncludeSnapshots, null, default);
在基本 Blob 上复制 Blob 快照
只要基本 Blob 位于联机层(热态或冷态),就可以在基本 Blob 上执行复制操作来提升快照。 系统将会保留快照,但会使用一个可读写的副本来覆盖其目标。
以下代码示例演示了如何在基本 Blob 上复制 Blob 快照:
public static async Task<BlockBlobClient> CopySnapshotOverBaseBlobAsync(
BlockBlobClient client,
string snapshotTimestamp)
{
// Instantiate BlockBlobClient with identical URI and add snapshot timestamp
BlockBlobClient snapshotClient = client.WithSnapshot(snapshotTimestamp);
// Restore the specified snapshot by copying it over the base blob
await client.SyncUploadFromUriAsync(snapshotClient.Uri, overwrite: true);
// Return the client object after the copy operation
return client;
}
资源
若要详细了解如何使用适用于 .NET 的 Azure Blob 存储客户端库来管理 Blob 快照,请参阅以下资源。
有关使用已弃用的 .NET 版本 11.x SDK 的相关代码示例,请参阅使用 .NET 版本 11.x 的代码示例。