无法将blob从一个存储帐户复制到另一个存储帐户

时间:2018-02-20 17:21:17

标签: c# azure-storage azure-storage-blobs

我尝试将blob从一个Azure存储帐户复制到另一个存储帐户(相同的订阅),但我得到一个例外:

  

指定的资源不存在。

正如我所知,问题是由容器设置为Private引起的,这是我们的业务目的。

我从this SO answer提出了暗示:

  

在源blob上创建共享访问签名(SAS),至少具有读取权限且有效期至少为15天,并使用该SAS URL(blob URL + SAS令牌)作为复制源。

此外,我在同一张海报上的Microsoft forums找到了一些代码,在那里他发布了适合他的代码。从那时起,我现在有以下代码(ctCancellationToken):

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托管的目标存储容器无法访问的。

1 个答案:

答案 0 :(得分:1)

回答我自己的问题......

我的代码不起作用,因为源blob位于我的本地存储模拟器(即localhost)中,这显然是由Azure托管的目标存储容器无法访问的。