OSS提供标准、低频访问、归档和冷归档四种存储类型,全面覆盖从热到冷的各种数据存储场景。本文主要介绍如何转换文件(Object)的存储类型。

示例代码

将标准或低频访问转换为归档或冷归档类型

注意
  • 在Object转换为归档存储类型后,如果在存储时间不足60天的情况下被覆写或者删除,会产生归档存储不足规定时长容量费用。
  • 在Object转换为冷归档存储类型后,如果在存储时间不足180天的情况下被覆写或者删除,会产生冷归档存储不足规定时长容量费用。

更多信息,请参见存储费用

以下代码用于将Object的存储类型从标准或低频访问转换为归档或冷归档类型:

# -*- coding: utf-8 -*-
import oss2
import os
# 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')

# Endpoint以杭州为例,其它Region请按实际情况填写。
# 填写Bucket名称,例如examplebucket。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
# 填写Object的完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
# 需确保该Object的存储类型为标准存储或低频访问类型。
object_name = 'exampledir/exampleobject.txt'

# 通过添加存储类型Header,将Object存储类型转换为归档类型。
headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_ARCHIVE}
# 通过添加存储类型Header,将Object存储类型转换为冷归档类型。
# headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_COLDARCHIVE}

# 更改文件存储类型。
bucket.copy_object(bucket.bucket_name, object_name, object_name, headers)                    

将归档类型转换为标准或低频访问类型

注意 在Object转换为低频访问类型后,如果在存储时间不足30天的情况下被覆写或者删除,会产生低频访问不足规定时长容量费用。更多信息,请参见存储费用

以下代码用于将Object的存储类型从归档类型转换为标准或低频访问类型:

# -*- coding: utf-8 -*-
import oss2
import os
import time
# 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')

# Endpoint以杭州为例,其它Region请按实际情况填写。
# 填写Bucket名称,例如examplebucket。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
# 填写Object的完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
# 需确保该Object的存储类型为归档类型。
object_name = 'exampledir/exampleobject.txt'

# 获取文件元信息。
meta = bucket.head_object(object_name)

# 解冻文件。根据解冻文件的大小,实际解冻时间可能会有变化,请以实际解冻时间为准。
if meta.resp.headers['x-oss-storage-class'] == oss2.BUCKET_STORAGE_CLASS_ARCHIVE:
    bucket.restore_object(object_name)
    while True:
        meta = bucket.head_object(object_name)
        if meta.resp.headers['x-oss-restore'] == 'ongoing-request="true"':
            time.sleep(5)
        else:
            break

# 通过添加存储类型Header,将Object存储类型转换为标准类型。
headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_STANDARD}
# 通过添加存储类型Header,将Object存储类型转换为低频访问类型。
# headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_IA}

# 更改文件存储类型。
bucket.copy_object(bucket.bucket_name, object_name, object_name, headers)

将冷归档类型转换为标准或低频访问类型

以下代码用于将Object的存储类型从冷归档类型转换为标准或低频访问类型:

# -*- coding: utf-8 -*-
import oss2
import os
import time
# 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')

# Endpoint以杭州为例,其它Region请按实际情况填写。
# 填写Bucket名称,例如examplebucket。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
# 填写Object的完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
# 需确保该Object的存储类型为冷归档类型。
object_name = 'exampledir/exampleobject.txt'

# 获取文件元信息。
meta = bucket.head_object(object_name)

# 解冻文件。
if meta.resp.headers['x-oss-storage-class'] == oss2.BUCKET_STORAGE_CLASS_COLD_ARCHIVE:
    # 设置解冻优先级。RESTORE_TIER_EXPEDITED表示1小时内解冻完成。
    job_parameters = RestoreJobParameters(RESTORE_TIER_EXPEDITED)
    # days用于设置Object解冻完成后保持解冻状态的天数。
    restore_config = oss2.models.RestoreConfiguration(days=5, job_parameters=job_parameters)
    # bucket.restore_object(object_name, input=restore_config)
    bucket.restore_object(object_name)
    while True:
        meta = bucket.head_object(object_name)
        if meta.resp.headers['x-oss-restore'] == 'ongoing-request="true"':
            time.sleep(5)
        else:
            break
# 通过添加存储类型Header,将Object存储类型转换为标准类型。
headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_STANDARD}
# 通过添加存储类型Header,将Object存储类型转换为低频访问类型。
# headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_IA}

# 更改文件存储类型。
bucket.copy_object(bucket.bucket_name, object_name, object_name, headers)

相关文档

关于转换文件存储类型的API接口说明,请参见CopyObject