版本控制应用于存储空间(Bucket) 内的所有文件(Object)。

通过Object的版本管理,在错误覆盖或者删除Object后,您能够将Bucket中存储的Object恢复至任意时刻的历史版本。Bucket的版本状态包括非版本化(默认)、开启多版本及暂停多版本三种。

设置Bucket多版本状态

以下代码用于设置Bucket为开启多版本(Enabled)或暂停多版本(Suspended)状态。
# -*- coding: utf-8 -*-
import oss2
from oss2.models import BucketVersioningConfig

# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
# Endpoint以杭州为例,其它Region请按实际情况填写。
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourBucketName>')

# 创建bucket多版本配置。
config = BucketVersioningConfig()
# 状态配置为Enabled或Suspended。
config.status = oss2.BUCKET_VERSIONING_ENABLE

# 设置bucket多版本状态。
result = bucket.put_bucket_versioning(config)
# 查看http返回码。
print('http response code:', result.status)

获取Bucket多版本状态

以下代码用于获取Bucket的多版本状态。
# -*- coding: utf-8 -*-
import oss2

# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
# Endpoint以杭州为例,其它Region请按实际情况填写。
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourBucketName>')

# 获取bucket多版本状态信息。
versioning_info = bucket.get_bucket_versioning()
# 查看bucket多版本状态, 如果曾开启过多版本则返回Enabled或Suspended, 如果从未开启过多版本则返回None。
print('bucket versioning status:', versioning_info.status)

列举Bucket中所有Object的版本信息

以下代码用于列举指定Bucket中包括删除标记(Delete Marker)在内的所有Object的版本信息。
# -*- coding: utf-8 -*-
import oss2
from oss2.models import BucketVersioningConfig

# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
# Endpoint以杭州为例,其它Region请按实际情况填写。
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourBucketName>')

# 开启bucket多版本功能之后调用list_object_versions接口才会返回不同版本的objec信息。
# 列出Bucket中包括删除标记(Delete Marker)在内的所有Object的版本信息。
result = bucket.list_object_versions()

# 查看列举的Object各版本信息。
for version_info in result.versions:
   print('version_info.versionid:', version_info.versionid)
   print('version_info.key:', version_info.key)

# 查看列举的Obejct删除标记的各版本信息。
for del_maker_Info in result.delete_marker:
   print('del_maker.key:', del_maker_Info.key)
   print('del_maker.versionid:', del_maker_Info.versionid)