全部产品
Search
文档中心

对象存储 OSS:Python转换文件存储类型

更新时间:Nov 08, 2024

OSS 提供多种存储类型,包括标准、低频访问、归档、冷归档和深度冷归档,以满足从热数据到冷数据的各种存储需求。在对象存储中,一旦对象被创建,其内容是不可修改的。这意味着,如果您想更改对象的存储类型,就无法直接修改原对象,而必须创建一个新的对象。因此,转换对象的存储类型需要使用 Bucket.CopyObject 方法,这一操作会通过复制原对象来实现存储类型的转换。

注意事项

  • 本文以华东1(杭州)外网Endpoint为例。如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。关于OSS支持的Region与Endpoint的对应关系,请参见OSS地域和访问域名

  • 本文以从环境变量读取访问凭证为例。如何配置访问凭证,请参见配置访问凭证

  • 本文以OSS域名新建OSSClient为例。如果您希望通过自定义域名、STS等方式新建OSSClient,请参见初始化

  • 要转换文件存储类型,您必须具有oss:GetObjectoss:PutObjectoss:RestoreObject权限。具体操作,请参见为RAM用户授权自定义的权限策略

示例代码

重要

当低频访问、归档、冷归档或者深度冷归档存储类型Object在存储不足规定时长时转换了存储类型或者提前删除时,需要收取不足规定时长容量费用。更多信息,请参见Object在存储不足规定时长时如何计费?

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

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

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
import os
# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"

# 填写Endpoint对应的Region信息,例如cn-hangzhou。注意,v4签名下,必须填写该参数
region = "cn-hangzhou"

# yourBucketName填写存储空间名称。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)

# 填写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_COLD_ARCHIVE}
# 通过添加存储类型Header,将Object存储类型转换为深度冷归档类型。
# headers = {'x-oss-storage-class': oss2.models.BUCKET_STORAGE_CLASS_DEEP_COLD_ARCHIVE}
# 更改文件存储类型。
bucket.copy_object(bucket.bucket_name, object_name, object_name, headers)                    

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

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

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
import os
import time
# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"

# 填写Endpoint对应的Region信息,例如cn-hangzhou。注意,v4签名下,必须填写该参数
region = "cn-hangzhou"

# yourBucketName填写存储空间名称。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)

# 填写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
from oss2.credentials import EnvironmentVariableCredentialsProvider
import os
import time
from oss2.models import RESTORE_TIER_EXPEDITED, RestoreJobParameters

# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"

# 填写Endpoint对应的Region信息,例如cn-hangzhou。注意,v4签名下,必须填写该参数
region = "cn-hangzhou"

# yourBucketName填写存储空间名称。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)

# 填写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