使用 .Net API startCopy 将页 blob 从一个存储帐户复制到另一个存储帐户
Copy page blob from one storage account to Another storage account using .Net API startCopy
我正在尝试使用 .net API startCopy 将一个存储帐户中的页面 blob 复制到另一个存储帐户。两个存储帐户都是标准类型,并且 blob 存在于源位置。我收到以下异常详细信息的 "cannotverifysourcepath" 错误。
我希望 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
要跨存储帐户复制 blob,源 blob 必须可公开访问。请检查源 blob 容器上的 ACL,看看它是否是 Private
.
如果源 blob 容器的 ACL 是 Private
,则有两种可能的解决方案:
- 在源 blob 上创建一个
Shared Access Signature (SAS)
,至少具有 Read
权限,有效期至少为 15 天,并使用该 SAS URL(blob URL + SAS 令牌)作为复制源。
- 不推荐,但您可以将源 blob 容器的 ACL 更改为
Blob
。这将使源 blob 可公开访问。在这种情况下,您的代码应该可以正常工作。
您可以尝试使用data movement library。具体来说:
await TransferManager.CopyAsync(source, target, false);
布尔参数指定这是否是服务端异步复制。如果是,则本地任务可能会在复制完成之前完成。
我已经验证当 source
和 target
在不同的帐户中并且两个访问策略都是 'private.'
时这有效
我正在尝试使用 .net API startCopy 将一个存储帐户中的页面 blob 复制到另一个存储帐户。两个存储帐户都是标准类型,并且 blob 存在于源位置。我收到以下异常详细信息的 "cannotverifysourcepath" 错误。
我希望 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
要跨存储帐户复制 blob,源 blob 必须可公开访问。请检查源 blob 容器上的 ACL,看看它是否是 Private
.
如果源 blob 容器的 ACL 是 Private
,则有两种可能的解决方案:
- 在源 blob 上创建一个
Shared Access Signature (SAS)
,至少具有Read
权限,有效期至少为 15 天,并使用该 SAS URL(blob URL + SAS 令牌)作为复制源。 - 不推荐,但您可以将源 blob 容器的 ACL 更改为
Blob
。这将使源 blob 可公开访问。在这种情况下,您的代码应该可以正常工作。
您可以尝试使用data movement library。具体来说:
await TransferManager.CopyAsync(source, target, false);
布尔参数指定这是否是服务端异步复制。如果是,则本地任务可能会在复制完成之前完成。
我已经验证当 source
和 target
在不同的帐户中并且两个访问策略都是 'private.'