AWS BOTO3 S3 python - 调用 HeadObject 操作时发生错误(404):未找到
Posted
技术标签:
【中文标题】AWS BOTO3 S3 python - 调用 HeadObject 操作时发生错误(404):未找到【英文标题】:AWS BOTO3 S3 python - An error occurred (404) when calling the HeadObject operation: Not Found 【发布时间】:2018-03-20 00:57:52 【问题描述】:我正在尝试下载 s3 存储桶中的目录。我正在尝试使用传输从 S3 存储桶下载目录,但出现“调用 HeadObject 操作时发生错误 (404):未找到”的错误。请帮忙。
S3 structure:
**Bucket
Folder1
File1**
注意:尝试下载 Folder1
transfer.download_file(self.bucket_name, self.dir_name, self.file_dir + self.dir_name)
【问题讨论】:
您无法下载“文件夹”。您单独下载对象。 添加到迈克尔的评论中,仅仅因为动物/狗/boxer.png 有一个对象并不意味着动物或动物/狗有一个对象(代表一个文件夹)所以 HeadObject通常会为这两者产生 404。 S3 是一个对象存储。您看到的路径实际上是对象名称的一部分。要抓取同一“路径”下的所有对象,必须指定“PREFIX”参数。 【参考方案1】:我最近遇到了同样的问题。您可能拼错了路径和文件夹名称。例如,就我而言,我搞砸了“/”。
要修复它,请确保您用作函数参数的变量包含正确的目录、文件夹和文件名称,就像在 S3 中一样。此外,请确保将“/”放在正确变量的正确位置。例如,就我而言,我发现:
bucket 名称:bucket_name(最后没有'/',也没有's3://') 目录名称:folder1/folder2/file_name(开头没有'/')我希望它可以帮助您和其他人轻松解决此错误。
【讨论】:
我的路径和文件夹名没问题。当我使用本地文件夹运行它时,我会按存储桶查看文件。但是,当我将它部署到我的 Digital Ocean 应用程序平台时,我会收到此错误。 对于未来的读者,还请注意,如果路径本身错误/损坏或您提供文件夹路径而不是文件路径,则会出现此错误。【参考方案2】:还有一种可能是您在创建 S3 资源时输入了错误的 endpoint_url
参数。
对于未来的用户,请像这样创建您的资源:
s3 = boto3.resource(
's3',
region_name=[your region, e.g. eu-central-1],
aws_access_key_id=[your access key],
aws_secret_access_key=[your secret key]
)
在上面,可以传递endpoint_url
,就像我错误地做的那样(后来我发现我不小心将端点 URL 传递给了不同的 AWS 服务)。
如果您使用 AWS CLI 进行身份验证,则可以省略 region_name
、aws_access_key
和 aws_secret_access_key
参数,如下所示:
s3 = boto3.resource('s3')
【讨论】:
【参考方案3】:我遇到的另一个可能原因是您尝试下载的文件包含 0 个字节。这很令人困惑,因为 AWS cli 会毫无异议地下载它
【讨论】:
【参考方案4】:花了很多时间找出为什么我在 DigitalOcean 平台上收到此错误消息。
请求应该这样执行:
client = boto3.client('s3', endpoint_url='https://fra1.digitaloceanspaces.com')
client.download_file('mybucketname', 'remotefilekeytoread', 'localfilenametosave')
如果 endpoint_url 设置为“https://mybucketname.fra1.digitaloceanspaces.com”,下载将失败并出现 404 错误,即使请求签名 URL 等其他操作可以使用此端点 URL。希望这对任何人都有帮助。
【讨论】:
以上是关于AWS BOTO3 S3 python - 调用 HeadObject 操作时发生错误(404):未找到的主要内容,如果未能解决你的问题,请参考以下文章
python s3 presigned_post aws boto3
我们可以使用 boto3 Python 在 aws s3 存储桶之间递归复制文件和文件夹吗?
S3 AWS 的 IAM 角色和密钥设置使用 boto3 访问两个不同的账户存储桶