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_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。希望这对任何人都有帮助。

【讨论】:

以上是关于AWS BOTO3 S3 python - 调用 HeadObject 操作时发生错误(404):未找到的主要内容,如果未能解决你的问题,请参考以下文章

python s3 presigned_post aws boto3

我们可以使用 boto3 Python 在 aws s3 存储桶之间递归复制文件和文件夹吗?

S3 AWS 的 IAM 角色和密钥设置使用 boto3 访问两个不同的账户存储桶

aws s3 ls 的 boto3 等价物是啥?

Python - 在 cloud9 AWS (boto3) 上查找文件的路径

python取aws s3文件