【发布时间】:2018-02-21 20:30:59
【问题描述】:
我正在尝试将 Blob 从一个 Azure 存储帐户复制到另一个存储帐户(相同订阅),但出现异常:
指定的资源不存在。
据我所知,问题是由容器设置为 Private 引起的,这对于我们的业务目的来说应该是这样的。
我从 this SO answer 那里得到了提示:
在源 blob 上创建至少具有读取权限和至少 15 天到期日期的共享访问签名 (SAS),并将该 SAS URL(blob URL + SAS 令牌)用作复制源。
此外,我在Microsoft forums 上找到了一些代码,来自他发布对他有用的代码的同一张海报。由此,我现在有了以下代码(ct 是 CancellationToken):
var snapshot = await blob.CreateSnapshotAsync(ct);
var sourceSAS = snapshot.GetSharedAccessSignature(new SharedAccessBlobPolicy {
Permissions = SharedAccessBlobPermissions.Read,
SharedAccessExpiryTime = DateTime.Now.AddYears(1),
SharedAccessStartTime = DateTimeOffset.Now.AddHours(-1)
});
var sourceUri = $"{snapshot.Uri}{sourceSAS}";
var backupBlob = FileBackupContainer.GetBlockBlobReference(blob.Name);
var targetSAS = backupBlob.GetSharedAccessSignature(new SharedAccessBlobPolicy {
Permissions = SharedAccessBlobPermissions.Write,
SharedAccessExpiryTime = DateTime.Now.AddYears(1),
SharedAccessStartTime = DateTimeOffset.Now.AddHours(-1)
});
var targetUri = $"{backupBlob.Uri}{targetSAS}";
var newTargetBlob = new CloudBlockBlob(new Uri(targetUri));
await newTargetBlob.StartCopyAsync(new Uri(sourceUri), ct);
await snapshot.DeleteAsync(ct);
但我还是遇到了同样的异常。
为了使用 SAS 复制 blob,我还需要什么?
更新:
我的代码不起作用,因为源 blob 位于我的本地存储模拟器(即 localhost)中,Azure 托管的目标存储容器显然无法访问。
【问题讨论】:
标签: c# azure-storage azure-blob-storage