这是我的boto3命令,用于从S3存储桶获取具有特定键的对象:
resp = s3client.get_object(Bucket='<>-<>', Key='MzA1MjY1NzkzX2QudHh0')
Run Code Online (Sandbox Code Playgroud)
它给出以下错误:
botocore.errorfactory.NoSuchKey: An error occurred (NoSuchKey) when calling the GetObject operation: The specified key does not exist.
Run Code Online (Sandbox Code Playgroud)
我已经检查了存储桶,并且密钥确实存在
我错过了什么或者我做错了吗?
您的 URL 末尾有一个 %0A;那是一个行分隔符。
一个通用答案可能对那些正在考虑文件路径并且可能对AWS S3 术语不熟悉的人有用。如果“名称”和“密钥An error occurred (NoSuchKey)...
”不正确,通常会导致此问题中发布的消息出现异常。
假设您有一个 JPEG 文件存储在存储桶中的某个“路径”中。在 AWS 控制台上导航到此对象会显示 S3 URI:
s3://my-bucket/some/very/long/path/my-image.jpeg
您可以my-image.jpeg
通过以下基本示例在 Python 中读取该对象:
import boto3
s3client = boto3.client('s3', region_name='us-east-1')
bucket_name = 'my-bucket'
object_key = 'some/very/long/path/my-image.jpeg'
try:
s3obj = s3client.get_object(Bucket=bucket_name, Key=object_key)
except Exception as e:
print(f"Error reading key {object_key} from bucket {bucket_name}: {e}")
else:
print(f"Got object: {s3obj}")
Run Code Online (Sandbox Code Playgroud)
由于您知道您拥有的密钥肯定在您要查找的文件的名称中,因此我建议使用 afilter
来获取名称以您的密钥作为前缀的对象。
s3 = boto3.resource('s3')
bucket = s3.Bucket('cypher-secondarybucket')
for obj in bucket.objects.filter(Prefix='MzA1MjY1NzkzX2QudHh0'):
print obj.key
Run Code Online (Sandbox Code Playgroud)
运行此代码时,您将获得所有以您的密钥开头的文件的密钥名称。这将帮助您找出您的文件在 S3 上确切调用的内容。
归档时间: |
|
查看次数: |
25503 次 |
最近记录: |