2016-10-14 2 views
0

.net API startCopy를 사용하여 한 스토리지 계정의 페이지 BLOB를 다른 스토리지 계정으로 복사하려고합니다. 두 스토리지 계정 모두 표준 유형이며 BLOB가 소스 위치에 있습니다. 예외 정보와 함께 "cannotverifysourcepath"오류가 나타납니다..Net API startCopy를 사용하여 하나의 스토리지 계정에서 다른 스토리지 계정으로 BLOB를 복사하십시오.

저는 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

당신이 포함시킨 것은 모두 스택 추적이며, 실제 전화가 아닙니다. 'StartCopy()'호출 방법을 보여주기 위해 편집하십시오. (실제 스토리지 계정 이름/키를 분명히 숨기십시오). 또한 소스 경로가 유효한지 확인하는 방법을 명확히하십시오. –

답변

0

data movement library을 사용해보세요. 구체적으로는

await TransferManager.CopyAsync(source, target, false); 

부울 매개 변수는 서비스 쪽 비동기 복사본인지 여부를 지정합니다. 그럴 경우 복사가 완료되기 전에 로컬 작업이 완료 될 수 있습니다.

나는 sourcetarget 다른 계정에 모두 액세스 정책이 때이 작동하는지 확인했습니다 '개인.'

1

저장소 계정간에 BLOB를 복사하려면 원본 BLOB에 공개적으로 액세스 할 수 있어야합니다. 소스 blob 컨테이너의 ACL을 확인하고 Private인지 확인하십시오.

소스의 얼룩 컨테이너의 ACL이 Private 경우, 두 가지 해결책이 있습니다 :

  1. 적어도 Read 권한 소스 방울과 적어도 15 일 유효 기간에 Shared Access Signature (SAS)을 만들고 것을 사용 SAS URL (blob URL + SAS 토큰)을 복사 원본으로 사용합니다.
  2. 소스 blob 컨테이너의 ACL을 Blob으로 변경할 수는 있지만 권장하지 않습니다. 이렇게하면 소스 블로 브를 공개적으로 액세스 할 수 있습니다. 이 경우 코드가 그대로 작동해야합니다.
관련 문제