AWS BOTO3 S3 python - 调用HeadObject操作时发生错误(404):未找到

时间:2017-10-08 20:46:56

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

我正在尝试下载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)

3 个答案:

答案 0 :(得分:14)

我最近遇到了同样的问题。您可能拼错了路径和文件夹名称。例如,在我的情况下,我搞砸了'/'。

要修复它,请确保您用作函数参数的变量包含S3中的目录,文件夹和文件的正确名称。另外,请确保将'/'放在正确的变量中的正确位置。例如,就我而言,我发现:

  • 存储桶名称: bucket_name (最后没有'/',没有's3://')
  • 目录名称: folder1 / folder2 / file_name (开头没有'/')

我希望它可以帮助您和其他人轻松解决此错误。

答案 1 :(得分:0)

我遇到的另一个可能原因是您尝试下载的文件包含0个字节。这非常令人困惑,因为AWS cli会毫无保留地下载它

答案 2 :(得分:0)

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