2017-06-27 37 views
3

這是從S3桶獲取物體與特定鍵我boto3命令:S3讓我即使在鍵存在NoSuchKey錯誤

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

它提供了以下錯誤:

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

我在桶已檢查的,關鍵確實存在

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上的確切名稱。

相關問題