c# - 使用 c# 库恢复 azure blob 快照
问题描述
我正在编写一个 CLI 实用程序,它可以做很多不同的事情,但我现在正在努力解决的是我有一个已知的 blob。对于那个 blob,我想恢复为那个 blob 拍摄的快照
await foreach (var snapshot in containerClient.GetBlobsAsync(
BlobTraits.All,
BlobStates.Snapshots,
blobPath))
{
_logger.LogInformation($"found blob {snapshot.Name} - {snapshot.Snapshot}");
if (DecideIfRightSnapshot(snapshot)) {
BlobClient snapshotBlob = containerClient.GetBlobClient(snapshot.Name);
_logger.LogInformation($"found snapshot {snapshotBlob.Uri}");
await sourceBlob.StartCopyFromUriAsync(snapshotBlob.Uri);
}
break;
}
首先,过滤器无法正常工作,因为列表中的最后一个 blob 始终是基本 blob。但我可以解决那个问题。
我正在努力解决的真正问题是使用库从快照中恢复 blob 的正确方法?我真的很担心,因为该.Uri
函数总是返回基本文件的 uri,即使它是一个快照。我被引导相信 URI 会是这样的
https://me.blob.core.windows.net/myapp/doc?snapshot=2020-12-16T17:07:44.1076450Z
但这不是正在记录的 URI。我应该自己构建完整的 URI 吗?
在所有搜索中,他们将此称为“推广”快照。但我在 API 中找不到“提升”方法。
我这样做对吗?
解决方案
如果您使用的是新版本的 blob 存储 sdk:Azure.Storage.Blobs,那么您应该自己构建完整的 URI。示例代码如下:
//other code
await foreach (var snapshot in containerClient.GetBlobsAsync(
BlobTraits.All,
BlobStates.Snapshots,
blobPath))
{
_logger.LogInformation($"found blob {snapshot.Name} - {snapshot.Snapshot}");
if(DecideIfRightSnapshot(snapshot)) {
BlobClient snapshotBlob = containerClient.GetBlobClient(snapshot.Name);
//construct the snapshot url
var snapshot_uri = snapshotBlob.Uri.ToString() + "?snapshot=" + snapshot.Snapshot;
_logger.LogInformation($"found snapshot {snapshot_uri }");
await sourceBlob.StartCopyFromUriAsync(snapshot_uri);
}
break;
}
对于升级,这意味着您通过 azure 门户恢复快照。这是一个 UI 操作,实际上它调用Put Blob From URL api。目前,sdk中没有这种方法。
但是如果你使用一些像WindowsAzure.Storage这样的旧包,它有很多方法来操作快照,请参阅这篇文章。注意:不建议使用旧包。
推荐阅读
- go - Go 频道——这里发生了什么
- c - C:为数组中的所有字符串添加文字,同时保留对原始字符串的访问权限
- javascript - 从映射对象中删除空数组
- xamarin - 如何修复xamarin中的空白列表视图页面
- encryption - 文件校验和中是否存在冲突?
- dart - 用颤振绘制虚线弧
- swift - 我有一个“UIImage”,我想将其转换为 NSData 以上传到 firebase 存储
- amazon-web-services - AWS Cloudfront CacheBehavior 的 PathPattern 中可接受的通配符
- c - 在从标准输入读取的while循环中捕获EOF字符
- python-3.x - 有没有办法让 Splash 等到站点上的所有 java 脚本加载?