全部產品
Search
文件中心

Object Storage Service:Python解凍檔案

更新時間:Mar 08, 2025

歸檔、冷歸檔以及深度冷歸檔類型的檔案需要解凍之後才能讀取。檔案解凍後,會產生一個標準儲存類型的檔案副本,即同時存在標準儲存類型的檔案副本和歸檔、冷歸檔或深度冷歸檔的原檔案。在檔案解凍的有效期間過後,標準儲存類型的檔案副本會自動刪除。本文介紹如何使用OSS Python SDK解凍歸檔、冷歸檔以及深度冷歸檔檔案。

注意事項

  • 本文範例程式碼以華東1(杭州)的地區IDcn-hangzhou為例,預設使用外網Endpoint,如果您希望通過與OSS同地區的其他阿里雲產品訪問OSS,請使用內網Endpoint。關於OSS支援的Region與Endpoint的對應關係,請參見OSS地區和訪問網域名稱

  • 要解凍檔案,您必須有oss:RestoreObject許可權。具體操作,請參見為RAM使用者授權自訂的權限原則

方法定義

restore_object(request: RestoreObjectRequest, **kwargs) → RestoreObjectResult

請求參數列表

參數名

類型

說明

request

RestoreObjectRequest

佈建要求參數,具體請參見RestoreObjectRequest

其中,RestoreObjectRequest的常用參數說明列舉如下:

參數名

類型

說明

bucket

str

儲存空間名稱

key

str

對象名稱

version_id

str

待解凍對象的版本號碼,如果不設定則預設指定最新版本的對象

restore_request

RestoreRequest

設定解凍請求參數,請參見RestoreRequest

其中,RestoreRequest的參數說明列舉如下:

參數名

類型

說明

days

int

設定解凍期間,具體請參見解凍狀態期間

tier

str

設定解凍消耗時間,具體請參見解凍消耗時間

傳回值列表

類型

說明

RestoreObjectResult

傳回值,具體請參見RestoreObjectResult

關於解凍檔案方法的完整定義,請參見restore_object.py

範例程式碼

您可以使用以下代碼解凍歸檔、冷歸檔或者深度冷歸檔檔案:

import time
import argparse
import alibabacloud_oss_v2 as oss

# 建立一個命令列參數解析器
parser = argparse.ArgumentParser(description="restore object sample")
# 添加需要的命令列參數
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
parser.add_argument('--key', help='The name of the object.', required=True)

def main():
    # 解析傳入的命令列參數
    args = parser.parse_args()

    # 從環境變數載入認證資訊
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 使用SDK預設配置
    cfg = oss.config.load_default()
    # 設定認證提供者為環境變數認證
    cfg.credentials_provider = credentials_provider
    # 設定地區
    cfg.region = args.region
    # 如果提供了endpoint,則設定endpoint為配置項
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 建立OSS用戶端
    client = oss.Client(cfg)

    # 執行解凍對象請求
    result = client.restore_object(oss.RestoreObjectRequest(
        bucket=args.bucket,
        key=args.key,
        restore_request=oss.RestoreRequest(
            days=1,
            # 可選:設定冷歸檔、深度冷歸檔對象的解凍優先順序,可設定為:Expedited、Standard、Bulk,預設值為Standard
            # tier="Bulk",
        )
    ))

    # 列印解凍請求的結果
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' version id: {result.version_id},'
          f' restore priority: {result.restore_priority},'
    )

    # 迴圈檢查對象是否已經完成解凍
    while True:
        # 擷取對象頭部資訊
        result = client.head_object(oss.HeadObjectRequest(
            bucket=args.bucket,
            key=args.key,
        ))

        # 檢查解凍狀態
        if result.restore and result.restore != 'ongoing-request="true"':
            print('restore is success')
            break
        # 5秒後再次檢查
        time.sleep(5)
        print(result.restore)

# 程式入口
if __name__ == "__main__":
    main()

相關文檔