【发布时间】:2017-01-03 17:24:42
【问题描述】:
我正在尝试将一个 blob(特别是 vhd)从存储帐户复制到另一个存储帐户。我正在编写的应用程序具有对两个存储帐户的所有者访问权限,并且可以在这些存储帐户上运行其他操作。 vhd 上没有租约(未附加 VM)。我有以下代码,但得到 403 禁止响应。
StorageCredentials scSource = new StorageCredentials(SourceStorageName, strSourceStorageKey);
StorageCredentials scTarget = new StorageCredentials(TargetStorageName, strTargetStorageKey);
CloudStorageAccount csaSource = new CloudStorageAccount(scSource, true);
CloudStorageAccount csaTarget = new CloudStorageAccount(scTarget, true);
CloudBlobClient cbcSource = csaSource.CreateCloudBlobClient();
CloudBlobClient cbcTarget = csaTarget.CreateCloudBlobClient();
CloudBlobContainer bcSource = cbcSource.GetContainerReference(SourceContainer);
CloudBlobContainer bcTarget = cbcTarget.GetContainerReference(TargetContainer);
CloudBlob cbSource = bcSource.GetBlobReference(strSourceDiskName);
CloudBlob cbTarget = bcTarget.GetBlobReference(strTargetDiskName);
Task<string> tskCopy = cbTarget.StartCopyAsync(cbSource.Uri);
while (tskCopy.Status != TaskStatus.RanToCompletion)
{
if (tskCopy.Exception != null)
throw tskCopy.Exception;
Thread.Sleep(2500);
}
不知道为什么会发生这种情况,因为我可以通过其他工具(cloud berry 等)将 blob 从一个存储帐户复制到另一个帐户。
【问题讨论】:
-
能否请您检查源容器的ACL?源容器中用于复制的 blob 应该是公开可用的。
-
高级存储帐户容器数据只能设置为帐户所有者的私有访问权限。
-
在这种情况下,您需要在源 blob 上创建一个至少具有
Read权限的 SAS URL,并将其用作源 URL 而不是 blob 的 URL。
标签: c# azure blob azure-blob-storage