我尝试使用下面的代码将文件从Amazon S3 Bucket下载到我的本地,但收到错误消息“无法找到凭据”
下面是我写的代码:
from boto3.session import Session
import boto3
ACCESS_KEY = 'ABC'
SECRET_KEY = 'XYZ'
session = Session(aws_access_key_id=ACCESS_KEY,
aws_secret_access_key=SECRET_KEY)
s3 = session.resource('s3')
your_bucket = s3.Bucket('bucket_name')
for s3_file in your_bucket.objects.all():
print(s3_file.key) # prints the contents of bucket
s3 = boto3.client ('s3')
s3.download_file('your_bucket','k.png','/Users/username/Desktop/k.png')
有人能帮我一下吗?
5条答案
按热度按时间kd3sttzy1#
你没有使用你创建的会话来下载文件,你使用的是你创建的s3客户端。如果你想使用客户端,你需要指定凭据。
或
afdcj2ne2#
从official documentation中的example,正确的格式为:
也可以使用以二进制模式打开的类似文件的对象。
所讨论的代码使用
s3 = boto3.client ('s3')
,它不提供任何凭据。验证客户端的格式如下所示:
最后,您还可以重用您创建的经过验证的session来获取存储桶,然后从存储桶中下载文件。
rur96b6h3#
如果你想从AWS S3下载文件,寻找一个更人性化的解决方案和其他工业级的功能,可以试试https://github.com/d6t/d6tpipe。它将S3的功能抽象成一个更简单的界面。它还支持目录同步、上传文件、权限和其他许多你需要从S3(和ftp)同步文件的功能。
wb1gzix04#
您可以使用awscli设置您的AWS配置文件,以避免在文件中引入您的凭据。
然后在代码中添加:
6pp0gazn5#
文件名:
可以是任何名称;用那个名字文件将被下载。
它可以添加到任何现有的本地目录。
密钥:
是S3文件路径沿着最后的文件名。
它不以反斜杠开头。
会话()
它会自动从
~/.aws/config
或~/.aws/credentials
中选择凭据如果没有,则需要显式传递它。