【AWS系列】boto3入门-下篇

简介: 下载文件和上传文件是对称的Client、Bucket、Object三个对象提供了、。是并行的,是串行的,这两个函数同样提供了ExtraArgs和Callback参数。描述了下载过程的ExtraArgs的可用参数。



上篇地址:

https://developer.aliyun.com/article/1060559

下面继续介绍boto3的使用

1、使用介绍

1.1 下载文件

下载文件和上传文件是对称的

Client、Bucket、Object三个对象提供了download_file()download_fileobj()download_file()是并行的,

download_file_obj()是串行的,

这两个函数同样提供了ExtraArgs和Callback参数。

boto3.s3.transfer.S3Transfer.ALLOWED_DOWNLOAD_ARGS描述了下载过程的ExtraArgs的可用参数。

代码示例:

import boto3
s3 = boto3.client('s3')
s3.download_file('BUCKET_NAME', 'OBJECT_NAME', 'FILE_NAME')
with open('FILE_NAME', 'wb') as f:
    s3.download_fileobj('BUCKET_NAME', 'OBJECT_NAME', f)
image.gif

传输配置

在上传文件、下载文件、复制文件过程中,AWS SDK会自动管理重试等网络配置。默认的网络配置可适用于大多数情况,只有特殊情境下才需要修改传输配置。

传输配置封装在 boto3.s3.transfer.TransferConfig对象中,upload_file()等函数都有一个Config参数接受一个TransferConfig对象。

修改multipart阈值

当使用upload_file()上传一个大文件时,如果文件大小超过了multipart_threshold,那么会启动多线程上传。

代码示例:

import boto3
from boto3.s3.transfer import TransferConfig
# Set the desired multipart threshold value (5GB)
GB = 1024 ** 3
config = TransferConfig(multipart_threshold=5*GB)
# Perform the transfer
s3 = boto3.client('s3')
s3.upload_file('FILE_NAME', 'BUCKET_NAME', 'OBJECT_NAME', Config=config)
image.gif

设置并发数

对于upload_file()download_file()默认启用多线程下载,为了减少网络占用或者增加网络占用,可以通过传输配置来控制。max_concurrency参数

代码示例:

# To consume less downstream bandwidth, decrease the maximum concurrency
config = TransferConfig(max_concurrency=5)
# Download an S3 object
s3 = boto3.client('s3')
s3.download_file('BUCKET_NAME', 'OBJECT_NAME', 'FILE_NAME', Config=config)
image.gif

设置并发的实现方式

在boto3中,并发是通过多线程来实现的。如果不使用线程就没法实现并发,max_concurrency参数会被忽略掉。

代码示例:

# Disable thread use/transfer concurrency
config = TransferConfig(use_threads=False)
s3 = boto3.client('s3')
s3.download_file('BUCKET_NAME', 'OBJECT_NAME', 'FILE_NAME', Config=config)
image.gif

1.2 静态服务

将一个Bucket作为一个静态服务

获取:

获取桶的静态服务配置

import boto3
# Retrieve the website configuration
s3 = boto3.client('s3')
result = s3.get_bucket_website('BUCKET_NAME')
image.gif

设置:

设置桶的静态服务配置

# Define the website configuration
website_configuration = {
    'ErrorDocument': {'Key': 'error.html'},
    'IndexDocument': {'Suffix': 'index.html'},
}
# Set the website configuration
s3 = boto3.client('s3')
s3.put_bucket_website('BUCKET_NAME', website_configuration)
image.gif

设置桶策略:

import json
# Create a bucket policy
bucket_name = 'BUCKET_NAME'
bucket_policy = {
    'Version': '2012-10-17',
    'Statement': [{
        'Sid': 'AddPerm',
        'Effect': 'Allow',
        'Principal': '*',
        'Action': ['s3:GetObject'],
        'Resource': f'arn:aws:s3:::{bucket_name}/*'
    }]
}
# Convert the policy from JSON dict to string
bucket_policy = json.dumps(bucket_policy)
# Set the new policy
s3 = boto3.client('s3')
s3.put_bucket_policy(bucket_name, Policy=bucket_policy)
image.gif

删除:

删除一个桶的网站配置

# Delete the website configuration
s3 = boto3.client('s3')
s3.delete_bucket_website('BUCKET_NAME')
image.gif

删除桶策略

# Delete a bucket's policy
s3 = boto3.client('s3')
s3.delete_bucket_policy('BUCKET_NAME')
image.gif

查询:

查询一个桶的权限

import boto3
# Retrieve the policy of the specified bucket
s3 = boto3.client('s3')
result = s3.get_bucket_policy('BUCKET_NAME')
print(result['Policy'])
image.gif


相关文章
|
存储 网络安全 API
【AWS系列】boto3入门-上篇
官方介绍:官方文档Boto 是AWS的基于python的SDK(当然还支持其他语言的SDK,例如Ruby, Java等),Boto允许开发人员编写软件时使用亚马逊等服务像S3和EC2等,Boto提供了简单,面向对象的API,也提供了低等级的服务接入。这里需要区分,Boto有两个版本,其中旧的版本boto2已经不推荐使用了,在一些亚马逊新建的region已经不支持旧的Boto2了(貌似中国就是这样的),所以如果开发Python代码的话建议使用Boto3。为什么不推荐Boto2?
1944 0
|
存储 网络协议
|
Java Go iOS开发
GO从入门到进阶教程系列 - 研发高性能ORM框架入门
        随着GO语言市场占比越来越高,我也开始转向使用GO开发项目;因为GO有好几大优点,比如容并发与协程,消息通讯,丰富的数据类型,函数多返回值,defer延迟处理机制,高性能易用的http服务,编程规范等等;也存在一些弱点,由于自身语言机制问题,导致GO不能像JAVA一样使用异常捕获机...
2089 0
|
Cloud Native 前端开发 Go
探索 Golang 云原生游戏服务器开发,根据官方示例实战 Gorilla WebSocket 的用法
探索 Golang 云原生游戏服务器开发,根据官方示例实战 Gorilla WebSocket 的用法
708 0
ExpressJS入门指南
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/8869655 ExpressJS入门指南 作者:chszs,转载需注明。
965 0
|
Java Apache
Griffon五分钟入门指南
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/7883839 版权声明:作者chszs,版权所有,谢绝转载! 一、介绍Griffon是一个类似于Grails的应用程序框架,用于构建富桌面应用程序,基于Groovy、Java和Swing等技术。
748 0
|
JSON 自然语言处理 JavaScript
TypeChat 入门指南
TypeChat 是一个革命性的库,它简化了使用 TypeScript 构建自然语言模型界面的过程。 它抹平了自然语言和结构化数据之间的差距,使开发人员更容易将自然语言界面集成到他们的应用程序中。
398 0
|
7月前
|
Java 数据处理 调度
Java多线程编程入门指南
Java多线程编程入门指南
|
存储 Web App开发 移动开发
Day 19: EmberJS 入门指南
到目前为止,我们这一系列文章涉及了Bower、AngularJS、GruntJS、PhoneGap和MeteorJS 这些JavaScript技术。今天我打算学习一个名为Ember的框架。本文将介绍如何用Ember创建一个单页面的社交化书签应用。本教程将包括两篇:第1篇介绍客户端代码和用HTML 5本地存储持久保存数据,第2篇中我们将使用一个部署在OpenShift上的REST后端。过几天我会写第2篇。
364 0
Day 19: EmberJS 入门指南

热门文章

最新文章