【发布时间】:2017-12-07 07:10:11
【问题描述】:
我正在像这样从 AWS S3 Bucket 下载文件:
import boto3
s3client = boto3.client("s3")
s3 = boto3.resource('s3')
bucket_name = 'practice_bucket'
bucket = s3.Bucket(bucket_name)
for obj in bucket.objects.all():
filename = obj.key.rsplit('/')[-1]
s3client.download_file(bucket_name, obj.key, "/txt/" + filename)
尝试将某些文件放在子目录下时,例如/txt/,我收到错误:
botocore.exceptions.ClientError:调用时发生错误(404) HeadObject 操作:未找到
奇怪的是,它适用于使用相同方法的其他文件类型,但不适用于具有.json 扩展名的文件。
可能是什么问题?我什至尝试不将它们放在绝对子目录路径中,我没有收到错误并将文件下载到与脚本下载相同的目录中。但是当我真正定义下载文件的路径时,我得到了错误。
【问题讨论】:
-
我刚刚尝试了您的代码,它运行良好。如果您收到 404 错误,则表示请求的密钥与实际密钥之间存在一些不匹配。
-
这个问题应该重新打开。我也有同样的问题。他提供了所需的行为、具体问题、错误以及代码。我现在将不得不为完全相同的问题再开一张票。我的关键匹配。我记录了它以确保。
-
我也是@ChristopherPisz。我也有同样的问题。也许这就是 AWS 的问题?我在 5 个月内一直在使用我的代码,它运行良好,直到今天,我得到了那个错误。我其实不知道为什么?
-
在我的情况下似乎与权限有关。我重新制定了 lambda 权限策略,它又开始工作了。
-
也发生在我身上。对我来说,当键不是以绝对路径开头时它起作用,即它不以“/”开头。
标签: python python-2.7 amazon-web-services amazon-s3 boto3