Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用c#库还原azure blob快照_C#_Azure_Azure Storage Blobs - Fatal编程技术网

使用c#库还原azure blob快照

使用c#库还原azure blob快照,c#,azure,azure-storage-blobs,C#,Azure,Azure Storage Blobs,我正在编写一个CLI实用程序,它可以做很多不同的事情,但我现在正在努力解决的是我有一个已知的blob。对于该blob,我希望恢复为该blob拍摄的快照 await foreach (var snapshot in containerClient.GetBlobsAsync( BlobTraits.All, BlobStates.Snapshots, blobPath)) { _logger.LogInformation($"found blob {sna

我正在编写一个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。但我可以解决这个问题

我正在努力解决的真正问题是如何使用libs从快照恢复blob?我真的很担心,因为
.Uri
函数总是返回基本文件的Uri,即使它是一个快照。我相信URI会是这样的

https://me.blob.core.windows.net/myapp/doc?snapshot=2020-12-16T17:07:44.1076450Z

但这不是要记录的URI。我应该自己构造完整的URI吗

在所有搜索中,他们都将此称为“升级”快照。但是我在API中找不到“升级”方法


我这样做对吗?

如果您使用的是新版本的blob storage sdk:,那么您应该自己构造完整的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操作,实际上它调用api。目前sdk中还没有这样的方法

但是,如果您使用的是一些旧的软件包,例如,它有许多方法可以使用快照进行操作,请参阅。注意:不建议使用旧的软件包