【问题标题】:AWS BOTO3 S3 python - An error occurred (404) when calling the HeadObject operation: Not FoundAWS BOTO3 S3 python - 调用 HeadObject 操作时发生错误(404):未找到
【发布时间】: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”参数。

标签: python amazon-web-services amazon-s3 error-handling boto3


【解决方案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_nameaws_access_keyaws_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。希望这对任何人都有帮助。

      【讨论】:

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