AWS BOTO3 S3 python - An error occurred (404) when calling the HeadObject operation: Not Found AWS BOTO3 S3 python - 调用HeadObject操作时发生错误(404):未找到

2024-04-20 08:19:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试下载s3 bucket中的一个目录。我试图使用transfer从S3 bucket下载一个目录,但是我得到一个错误:“调用HeadObject操作时发生错误(404):未找到”。请帮忙。

S3 structure:
  **Bucket
     Folder1
        File1**

注意:正在尝试下载Folder1

transfer.download_file(self.bucket_name, self.dir_name, self.file_dir + self.dir_name)

Tags: nameself目录s3bucket错误dirstructure
3条回答

我遇到的另一个可能的原因是您试图下载的文件包含0个字节。这相当令人困惑,因为AWS cli将在没有任何异议的情况下下载它

我最近也有同样的问题。您可能拼错了路径和文件夹名。例如,在我的例子中,我搞错了“/”。

若要修复此问题,请确保用作函数参数的变量包含S3中目录、文件夹和文件的正确名称。另外,请确保将“/”放在正确变量的正确位置。例如,在我的案例中,我发现:

  • 存储桶名称:存储桶名称(结尾没有“/”,没有“s3://”)
  • 目录名:folder1/folder2/file_name(开头没有“/”)

我希望它能帮助你和其他人轻松地克服这个错误。

另一个可能是在创建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')

相关问题 更多 >