如何查看OSS文件解冻是否完成?

对归档、冷归档、深度冷归档的OSS文件进行解冻后,要确认文件已完成解冻以进行读取,对于大量文件,您可以调用ListObjectsV2ListObjectsListObjectVersions接口指定某个前缀(prefix)来批量查看文件的解冻状态信息,通过响应元素RestoreInfo进行判断;对于少量文件,您可以调用HeadObject接口精确指定文件名(key)来查看文件的解冻状态信息,通过响应头x-oss-restore进行判断。

批量查看文件的解冻状态

如果文件数量较多,要批量查看文件的解冻状态,您可以调用ListObjectsV2ListObjectsListObjectVersions接口并检查响应元素RestoreInfo来获取解冻状态信息:

  • 如果没有进行解冻操作,或者解冻操作已经超时,没有RestoreInfo字段返回。

  • 如果进行了解冻操作,但解冻未完成,RestoreInfo字段会显示ongoing-request="true"

  • 如果进行了解冻操作,且解冻完成,RestoreInfo字段将会显示ongoing-request="false",并且会包含一个expiry-date,它表示对象可读状态的截止时间。

注意事项

调用ListObjectsV2ListObjectsListObjectVersions接口时,不支持指定文件的存储类型。如果需要在返回结果种筛选出归档、冷归档、深度冷归档等存储类型的文件,您必须手动检查每个文件的storage-class属性,并进行客户端过滤。

权限说明

重要

OSS控制台和命令行工具ossutil不支持通过调用ListObjectsV2ListObjectsListObjectVersions接口批量查看文件的解冻状态。

使用阿里云SDK

调用ListObjects接口查看存储空间examplebucket种前缀为exampledir/的文件的解冻状态的Python示例代码如下:

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

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

# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称,例如examplebucket。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')

# 列举Bucket的examlpedir目录下的所有文件。
for obj in oss2.ObjectIterator(bucket, prefix='exampledir/'):
    # 检查文件的存储类型是否为归档、冷归档或深度冷归档
    if obj.storage_class in ['Archive', 'ColdArchive', 'DeepArchive']:
        print("etag:", obj.etag)
        print("key:", obj.key)
        print("last_modified:", obj.last_modified)
        print("size:", obj.size)
        print("storage_class:", obj.storage_class)
        print("type:", obj.type)
        print("restore_info:", obj.restore_info)
        print("owner.id:", obj.owner.id)
        print("owner.display_name:", obj.owner.display_name)

返回示例如下:

etag: 1797116AF33DB090B2DC79FE70E6F685
key: exampledir/exampleobjec2.txt
last_modified: 1704262519
size: 941
storage_class: DeepColdArchive
type: Normal
restore_info: None
owner.id: 137918634953****
owner.display_name: 137918634953****
etag: 1797116AF33DB090B2DC79FE70E6F685
key: exampledir/exampleobject.txt
last_modified: 1704262504
size: 941
storage_class: ColdArchive
type: Normal
restore_info: None
owner.id: 137918634953****
owner.display_name: 137918634953****
etag: 1797116AF33DB090B2DC79FE70E6F685
key: exampledir/exampleobject1.txt
last_modified: 1704262612
size: 941
storage_class: Archive
type: Normal
restore_info: None
owner.id: 137918634953****
owner.display_name: 137918634953****

更多语言的示例代码,请参考SDK简介中的列举文件。

使用REST API

如果您的程序自定义要求较高,您可以直接发起REST API请求。直接发起REST API请求需要手动编写代码计算签名。更多信息,请参见ListObjectsV2(GetBucketV2)GetBucket (ListObjects)ListObjectVersions(GetBucketVersions)

查看指定文件的解冻状态

如果文件数量较少,要查看指定文件的解冻状态,您可以调用HeadObject接口并检查返回头x-oss-restore来获取解冻状态信息:

  • 如果没有进行解冻操作,或者解冻操作已经超时,那么x-oss-restore字段不会返回。

  • 如果进行了解冻操作,但解冻未完成,x-oss-restore字段会显示ongoing-request="true"

  • 如果进行了解冻操作,且解冻完成,x-oss-restore字段将会显示ongoing-request="false",并且会包含一个expiry-date,它表示对象可读状态的截止时间。

注意事项

如果文件数量较多,调用HeadObject接口查看文件的解冻状态会产生较高的GET请求费用。更多信息,请参见请求费用

权限说明

要查看指定文件的解冻状态,您必须具有oss:GetObject权限。具体操作,请参见为RAM用户授权自定义的权限策略

使用OSS控制台

  1. 登录OSS管理控制台

  2. 单击Bucket 列表,然后单击目标Bucket名称。

  3. 在左侧导航栏,选择文件管理>文件列表

  4. 在目标文件右侧的操作栏下,选择详情

    • 如果没有进行解冻操作,或者解冻操作已经超时,详情面板中的文件名右侧显示解冻

    • 如果进行了解冻操作,但解冻未完成,详情面板中的文件名右侧显示解冻中

    • 如果解冻完成,详情面板中的文件名右侧显示解冻完成解冻有效时间右侧显示Object进入可读状态的过期时间

使用阿里云SDK

调用HeadObject接口查看存储空间examplebucketexampledir目录下的归档文件exampleobject.txt解冻状态的Python示例代码如下:

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
import json

# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称,例如examplebucket。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')

# 获取对象的元数据。
result = bucket.head_object('exampledir/exampleobject.txt')

# 输出HTTP响应头部, 获取关于对象的一些元数据。使用json.dumps来格式化打印json。
print(json.dumps(dict(result.headers), indent=4))

返回示例如下:

{
    "Server": "AliyunOSS",
    "Date": "Wed, 03 Jan 2024 03:32:58 GMT",
    "Content-Type": "text/plain",
    "Content-Length": "941",
    "Connection": "keep-alive",
    "x-oss-request-id": "6594D56AE80D013535FE****",
    "Accept-Ranges": "bytes",
    "ETag": "\"1797116AF33DB090B2DC79FE70E6F685\"",
    "Last-Modified": "Wed, 03 Jan 2024 03:26:50 GMT",
    "x-oss-object-type": "Normal",
    "x-oss-hash-crc64ecma": "10914985812740272941",
    "x-oss-storage-class": "Archive",
    "x-oss-restore": "ongoing-request=\"false\", expiry-date=\"Thu, 04 Jan 2024 03:28:54 GMT\"",
    "x-oss-expiration": "expiry-date=\"Thu, 04 Jan 2024 00:00:00 GMT\", rule-id=\"ae01d217-94e8-44a6-989a-b89583b****\"",
    "x-oss-version-id": "null",
    "Content-MD5": "F5cRavM9sJCy3Hn+cOb2hQ==",
    "x-oss-server-time": "54"
}

更多语言的示例代码,请参考SDK简介中的获取文件元数据。

使用命令行工具ossutil

查看存储空间examplebucket目录下Key为exampledir/exampleobject.txt的文件的解冻状态的示例命令如下。

ossutil stat oss://examplebucket/exampledir/exampleobject.txt

解冻完成的返回示例如下。

ACL                   : private
Accept-Ranges         : bytes
Content-Length        : 941
Content-Md5           : F5cRavM9sJCy3Hn+cOb2hQ==
Content-Type          : text/plain
Etag                  : 1797116AF33DB090B2DC79FE70E6F685
Last-Modified         : 2024-01-03 11:26:50 +0800 CST
Owner                 : 137918634953****
X-Oss-Expiration      : expiry-date="Thu, 04 Jan 2024 00:00:00 GMT", rule-id="ae01d217-94e8-44a6-989a-b89583b****"
X-Oss-Hash-Crc64ecma  : 10914985812740272941
X-Oss-Object-Type     : Normal
X-Oss-Restore         : ongoing-request="false", expiry-date="Thu, 04 Jan 2024 03:28:54 GMT"
X-Oss-Storage-Class   : Archive
X-Oss-Version-Id      : null

0.291855(s) elapsed

更多信息, 请参见stat(查看Bucket和Object信息)

使用REST API

如果您的程序自定义要求较高,您可以直接发起REST API请求。直接发起REST API请求需要手动编写代码计算签名。更多信息,请参见HeadObject