2016-05-10 49 views
1

我正在嘗試複製S3對象,使用有效的鍵但CopyObject()不停地返回「指定的鍵不存在」。AWSSDK,S3 CopyObjectRequest返回NoSuchKey錯誤的有效密鑰

但是,GetObject和ListObjects返回對象沒有問題。
下面是一個示例:

var copyReq = new CopyObjectRequest 
{ 
    SourceBucket = bucketName, 
    SourceKey = key, 
    DestinationBucket = bucketName, 
    DestinationKey = ("/UserImages/mynewkeyname.jpg"), 
    StorageClass = S3StorageClass.StandardInfrequentAccess, 
    CannedACL = Amazon.S3.S3CannedACL.PublicRead 
}; 

s3.CopyObject(copyReq); 

ListObjectsResponse listResponse = s3.ListObjects(new ListObjectsRequest 
{ 
    BucketName = bucketName, 
    MaxKeys = 1, 
    Prefix = key 
}); 

var request = new Amazon.S3.Model.GetObjectRequest() 
    { 
     BucketName = bucketName, 
     Key = key, 
    }; 

var getResponse = s3.GetObject(request); 

鍵和bucketname被別人定義在哪裏,但他們從其他其他API響應被拉扯。

回答

0

基於這一行:

DestinationKey = ("/UserImages/mynewkeyname.jpg"), 

好像你也犯了同樣的錯誤與源,你有目的地合理的假設。

桶的根部是空字符串,而不是/,因此S3對象鍵不以前導斜槓開頭。

要澄清,https://example.s3.amazonaws.com/test.jpg的對象密鑰是test.jpg而不是/test.jpg

+0

原來這是像你說的,但更糟。如果它只是一個主要的斜線,那麼SDK可以算出來。我的SourceKey中的鍵實際上是由其他人插入的,並以雙斜槓開始。我認爲其中一個永久停留在那裏,因爲我無法通過控制檯刪除雙斜槓。 – user2245759

0

,你也可以使用S3FileInfo.CopyTo,S3FileInfo.CopyToLocal或S3FileInfo.CopyFromLocal方法perfom複製它是更優雅的方式做,與AWSSDK 3.1.0 C#

相關問題