使用 Python 从 AWS S3 下载文件

新手上路,请多包涵

我正在尝试使用以下代码将文件从 Amazon S3 存储桶下载到我的本地,但我收到一条错误消息“无法找到凭据”

下面给出的是我编写的代码:

 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')

谁能帮我解决这个问题?

原文由 Taukheer 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

您没有使用创建的会话来下载文件,而是使用创建的 s3 客户端。如果要使用客户端,则需要指定凭据。

 your_bucket.download_file('k.png', '/Users/username/Desktop/k.png')

或者

s3 = boto3.client('s3', aws_access_key_id=... , aws_secret_access_key=...)
s3.download_file('your_bucket','k.png','/Users/username/Desktop/k.png')

原文由 Joaquín Bucca 发布,翻译遵循 CC BY-SA 3.0 许可协议

官方文档 中的 例子 来看,正确的格式是:

 import boto3

s3 = boto3.client('s3', aws_access_key_id=... , aws_secret_access_key=...)
s3.download_file('BUCKET_NAME', 'OBJECT_NAME', 'FILE_NAME')

您还可以使用以二进制模式打开的类文件对象。

 s3 = boto3.client('s3', aws_access_key_id=... , aws_secret_access_key=...)
with open('FILE_NAME', 'wb') as f:
    s3.download_fileobj('BUCKET_NAME', 'OBJECT_NAME', f)
    f.seek(0)


有问题的代码使用 s3 = boto3.client ('s3') ,它不提供任何凭据。

此处 显示了用于验证客户端的格式:

 import boto3
client = boto3.client(
    's3',
    aws_access_key_id=ACCESS_KEY,
    aws_secret_access_key=SECRET_KEY,
    aws_session_token=SESSION_TOKEN,
)

# Or via the Session
session = boto3.Session(
    aws_access_key_id=ACCESS_KEY,
    aws_secret_access_key=SECRET_KEY,
    aws_session_token=SESSION_TOKEN,
)


最后,您还可以重新使用您创建的经过身份验证的 会话 来获取 存储桶,然后从存储桶中 下载文件

 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)

# session is authenticated and can access the resource in question
session.resource('s3')
    .Bucket('bucket_name')
    .download_file('k.png','/Users/username/Desktop/k.png')

原文由 Increasingly Idiotic 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
Stack Overflow 翻译
子站问答
访问
宣传栏