我正在尝试下载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)
答案 0 :(得分:14)
我最近遇到了同样的问题。您可能拼错了路径和文件夹名称。例如,在我的情况下,我搞砸了'/'。
要修复它,请确保您用作函数参数的变量包含S3中的目录,文件夹和文件的正确名称。另外,请确保将'/'放在正确的变量中的正确位置。例如,就我而言,我发现:
我希望它可以帮助您和其他人轻松解决此错误。
答案 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_name
,aws_access_key
和aws_secret_access_key
参数,如下所示:
s3 = boto3.resource('s3')