我正在尝试使用.net API startCopy将一个存储帐户中的页面blob复制到另一个存储帐户。两个存储帐户都是标准类型,并且blob存在于源位置。我在下面的异常细节中收到“couldverifysourcepath”错误。
我希望startcopy API能够从帐户复制到另一个帐户。谁能帮助我弄清楚这里的问题是什么?
Exception- Microsoft.WindowsAzure.Storage.StorageException: The remote server returned an error: (404) Not Found. ---> System.Net.WebException: The remote server returned an error: (404) Not Found.
at System.Net.HttpWebRequest.GetResponse()
at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext)
--- End of inner exception stack trace ---
at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext)
at Microsoft.WindowsAzure.Storage.Blob.CloudBlob.StartCopy(Uri source, AccessCondition sourceAccessCondition, AccessCondition destAccessCondition, BlobRequestOptions options, OperationContext operationContext)
at Microsoft.WindowsAzure.Storage.Blob.CloudPageBlob.StartCopy(CloudPageBlob source, AccessCondition sourceAccessCondition, AccessCondition destAccessCondition, BlobRequestOptions options, OperationContext operationContext)
Request Information
RequestID:1a82f5b6-0001-008f-7328-26bec1000000
RequestDate:Fri, 14 Oct 2016 14:35:31 GMT
StatusMessage:The specified resource does not exist.
ErrorCode:CannotVerifyCopySource
答案 0 :(得分:1)
要跨存储帐户复制blob,源Blob必须可公开访问。请检查源blob容器上的ACL,看看它是否为Private
。
如果源blob容器的ACL为Private
,则有两种可能的解决方案:
Shared Access Signature (SAS)
,其权限至少为Read
,有效期至少为15天,并使用该SAS URL(blob URL + SAS令牌)作为复制源。Blob
。这将使源blob可公开访问。在这种情况下,您的代码应该按原样运行。答案 1 :(得分:0)
您可以尝试使用data movement library。具体做法是:
await TransferManager.CopyAsync(source, target, false);
boolean参数指定这是否是服务端异步副本。如果是,则在复制完成之前可以完成本地任务。
我已经确认,当source
和target
位于不同的帐户且两个访问政策都是“私有”时,此方法有效。