全部產品
Search
文件中心

Object Storage Service:如何查看OSS檔案解凍是否完成?

更新時間:Jun 19, 2024

對歸檔、冷歸檔、深度冷歸檔的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