【问题标题】:botocore.exceptions.ClientError: An error occurred (404) when calling the HeadObject operation: Not Foundbotocore.exceptions.ClientError:调用 HeadObject 操作时发生错误(404):未找到
【发布时间】: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


【解决方案1】:

你的代码是正确的。

botocore.exceptions.ClientError:调用时发生错误(404) HeadObject 操作:未找到

当您尝试获取的对象在存储桶中不存在时,将引发此错误。

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。
【解决方案2】:

升级 aiobotocore 为我解决了这个问题。

pip install --upgrade aiobotocore

【讨论】:

    猜你喜欢
    • 2020-09-14
    • 2018-03-20
    • 2022-11-11
    • 1970-01-01
    • 2018-06-08
    • 2020-01-19
    • 2021-09-03
    • 2020-06-07
    • 2022-11-11
    相关资源
    最近更新 更多