2017-06-27 193 views
3

これでS3バケットから特定のキーを持つオブジェクトを取得するための私のboto3コマンド:S3私にキーが存在していてもNoSuchKeyエラーを与える

botocore.errorfactory.NoSuchKey: An error occurred (NoSuchKey) when calling the GetObject operation: The specified key does not exist. 

resp = s3client.get_object(Bucket='<>-<>', Key='MzA1MjY1NzkzX2QudHh0') 

それは次のエラーを与えます

私はバケツにチェックして、キーが実際に

enter image description here

存在し、私は欠場何か私はここで何か悪いことをしましたか?

答えて

4

URLの最後に%0Aがあります。それは行区切りです。

+0

うん。 'MzA1MjY1NzkzX2QudHh0%0A'でも試しました。うまくいかなかった:/ – Dawny33

+0

オブジェクトの名前を変更してください。それはおそらくあなたに問題を与えている特殊文字です。 –

+2

あなたのバケットにも公開リストがあります。私はhttps://s3.amazonaws.com/cypher-secondarybucket/MzA1MjY1NzkzX2QudHh0%0Aに移動し、https://s3.amazonaws.com/cypher-secondarybucket/MzA1MjY1NzkzX2QudHh0に行くのとは対照的に「アクセスが拒否されました」を取得することができましたキーが存在しない " –

3

あなたが探しているファイルの名前に間違いなくあることがわかっているので、filterを使用して、キーを接頭辞として持つ名前のオブジェクトを取得することをお勧めします。

s3 = boto3.resource('s3') 
bucket = s3.Bucket('cypher-secondarybucket') 
for obj in bucket.objects.filter(Prefix='MzA1MjY1NzkzX2QudHh0'): 
    print obj.key 

このコードを実行すると、キーで始まるすべてのファイルのキー名が取得されます。これは、あなたのファイルがS3で正確に呼び出されたものを見つけるのに役立ちます。

関連する問題