S3常见接口使用
分段上传
分段上传允许上传单个对象作为一组分段。每个分段都是对象数据的连续部分。您可以独立上传以及按任意顺序上传这些对象分段。如果任意分段传输失败,可以重新传输该分段且不会影响其他分段。当对象的所有段都上传后,Amazon S3 将这些段汇聚起来,然后创建对象。
分段上传可提供以下优势:
- 文件小于5MB不适用分块上传
- 并行上传分段以提高吞吐量。
- 较小的分段大小可以将由于网络错误而需重启失败的上传所产生的影响降至最低。
- 可以随时上传对象分段。启动分段上传后,不存在过期期限;您必须显式地完成或中止分段上传。
- 可以在创建对象的同时上传对象。
分段上传分三个步骤:初始化准备、并行上传,完成上传。同时在并行阶段,还可以进行终止上传和查询已上传列表的操作。
上传初始化阶段
发送HTTP POST请求,成功则返回对应的upload ID(后续的上传操作都必须使用相同的upload ID),完成Metadata设置和ACL设置。
上传分段阶段
client端完成文件切片,每个片有一个1~10000之间的任意分段编号(相同的编号会出现覆盖),无论何时上传分段,Amazon S3 都将在其响应中返回ETag 标头。对于每个分段上传,必须记录分段编号和ETag 值。除最后一个分块以为,其余分块大于 5 MB。
完成上传阶段
完成分段上传时,Amazon S3 通过按升序的分段编号规范化分段来创建数据元。成功完成请求后,分段将不再存在。完成分段上传请求必须包括上传 ID 以及分段编号和相应的 ETag 值的列表。这一阶段在完成所有upload Part以后必须执行(否则占用的临时资源仍然纳入计费范围)
分段上传列表
对于每个列出分段请求,Amazon S3 将返回有关特定分段上传的分段信息,最多为 1 000 个分段。如果分段上传中的分段超过 1 000 个,您必须发送一系列列出分段请求以检索所有分段。返回的段列表不包括未完成上传的段。
分块上传规范
名称 | 规范 |
---|---|
最大对象大小 | 5 TB |
每次上传的分段的最大数量 | 10000 |
分段编号 | 1 到 10000(含) |
分段大小 | 5 MB 到 5 GB,最后一个分段可以 <5 MB |
列出分段请求返回的分段的最大数量 | 1000 |
在列出分段上传请求中返回的分段的最大数量 | 1000 |
【代码示例】
1 | # -*- coding: utf-8 -*- |
【效果】
1 | lihongbo01@cld-unknown212867:~/workspace/s3_workspace$ ls |
【核心函数】
boto.connect_s3:连接S3
conn.get_bucket:根据name获取bucket
bucket.initiate_multipart_upload:初始化分段上传
boto.utils.compute_md5:计算文件md5值
mpu.upload_part_from_file:上传某一块
mpu.complete_upload():完成上传
【注意】
- 除最后一块外每块要大于5MB
- bucket要存在
- Debug可以根据接口返回的错误信息然后查阅API文档
对象批量删除
将多个对象的删除请求合成一个,降低请求的负载;批量删除之前需要获得这些待删除对象的key(最多一次1000个)。响应:verbose/quiet模式。
批量删除Object(Python版本)
1 | # -*- coding: utf-8 -*- |
【代码示例】
1 | bucket = conn.get_bucket(bucket_name) # 获取bucket实例 |
【效果】
1 | lihongbo01@cld-unknown212867:~/workspace/s3_workspace$ s3cmd ls s3://mybucket |
【核心函数】
bucket.delete_keys(file_list):批量删除Object
删除Buekct时先批量删除Object
1 | lihongbo01@cld-unknown212867:~/workspace/s3_workspace$ s3cmd rb s3://mybucket --force --recursive |
s3cmd rm s3://mybucket –recursive:清空桶(批量删除,支持前缀匹配)
获取对象列表
支持使用前缀
1 | file_list = bucket.get_all_keys(prefix='user1_23695/') |
【代码示例】
1 | bucket = conn.get_bucket(bucket_name) #获取bucket实例 |
【效果】
1 | lihongbo01@cld-unknown212867:~/workspace/s3_workspace$ python list_key.py |
返回的是一个ResultSet,接口可以参考:http://boto.cloudhackers.com/en/latest/ref/s3.html
【核心函数】
bucket.get_all_keys:获取所有键值