2016-05-10 12 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です。あなたもperfomするS3FileInfo.CopyTo、S3FileInfo.CopyToLocalまたはS3FileInfo.CopyFromLocalメソッドを使用することができます

+0

あなたが言ったようだったが判明したが悪化していることを行うには、よりエレガントな方法でコピーします。その1つの主要なスラッシュSDKはそれを把握することができます。私のSourceKeyのキーは、他の人によって実際に挿入され、二重スラッシュで開始されました。私はコンソールの中で二重スラッシュを削除することはできないので、一つは永久にそこに詰まっていると思う。 – user2245759

0

は、それがAWSSDK 3.1.0 C#

関連する問題