全部產品
Search
文件中心

Object Storage Service:解凍歸檔、冷歸檔、深度冷歸檔的OSS檔案以便讀取

更新時間:Sep 21, 2024

如果未開啟歸檔直讀,歸檔類型的Object需要解凍後才能讀取。冷歸檔、深度冷歸檔不支援開啟直讀,冷歸檔、深度冷歸檔類型的Object需要解凍後才能讀取。涉及讀取的操作包括下載(GetObject)、圖片處理(ProcessImage)、拷貝(CopyObject)、分區拷貝(UploadPartCopy)、查詢(SelectObject)以及通過POST請求進行資料處理(PostProcessTask)。本文介紹執行資料讀取操作之前,如何完成歸檔、冷歸檔以及深度冷歸檔Object的解凍操作。

前提條件

注意事項

  • RestoreObject介面只針對歸檔、冷歸檔和深度冷歸檔類型的Object,不適用於標準類型和低頻訪問類型的Object。

  • 對歸檔、冷歸檔以及深度冷歸檔Object執行非資料讀取請求時(例如DeleteObjectDeleteMultipleObjectsGetObjectMetaHeadObject等),無需解凍就能操作。對於無需解凍就能完成的操作,如果再解凍,將會產生額外不必要的費用。

  • 對於Object第一次調用RestoreObject介面,則返回202。如果已經成功調用過RestoreObject介面,且Object已完成解凍,再次調用時返回200 OK。

  • 對於正在解凍中的Object不支援重複調用RestoreObject介面,需要等待Object解凍完成後再次調用RestoreObject介面。否則報錯409。

  • 對於開啟版本控制的Bucket,Object的各個版本可以對應不同的儲存類型。調用RestoreObject介面預設解凍Object目前的版本,您可以通過指定versionId的方式來解凍Object指定版本。

解凍過程

不同儲存類型的Object的解凍過程相同。Object的解凍過程如下。

  1. 初始時,Object處於冷凍狀態。

  2. 提交一次解凍請求後,Object處於解凍中狀態。

  3. 服務端完成解凍任務後,Object進入解凍狀態。此時您可以讀取Object。

  4. 如果Object處於解凍狀態時,再次提交一次解凍請求,Object的解凍狀態期間在原基礎上累加。延長後的總時間長度不能超過每種儲存類型的解凍狀態期間的最大值。

  5. 解凍狀態結束後,Object再次返回到冷凍狀態。

解凍消耗時間

解凍不同儲存類型的Object所消耗的時間可參考下表。解凍時間請以實際為準。

Object的儲存類型

說明

歸檔類型

1分鐘。

冷歸檔類型

  • 高優先順序(Expedited):表示1小時內完成解凍。

  • 標準(Standard):表示2~5小時內完成解凍。

  • 批量(Bulk):表示5~12小時內完成解凍。

深度冷歸檔類型

  • 高優先順序(Expedited):表示12小時內完成解凍。

  • 標準(Standard):表示48小時內完成解凍。

解凍配額

  • 單個阿里雲帳號在單個地區的冷歸檔類型的Object的解凍配額參考值:平均每秒500個Object,三種解凍優先順序總解凍配額為每天100 TB~120 TB。如您的業務有更高的解凍配額需求,請聯絡支援人員

  • 單個阿里雲帳號在單個地區的深度冷歸檔類型的Object解凍配額參考值:平均每秒100個Object,兩種解凍優先順序總解凍配額為每天10 TB~15 TB。如您的業務有更高的解凍配額需求,請聯絡支援人員

說明

超出冷歸檔以及深度冷歸檔的解凍配額參考值後,仍可以提交解凍請求。解凍請求將排入隊列中,且解凍完成時間可能超出指定優先順序對應的完成時間。

解凍狀態期間

不同儲存類型的Object處於解凍狀態的期間如下。

Object的儲存類型

說明

歸檔類型

取值為1~7的正整數,單位為天。

冷歸檔類型

取值為1~365的正整數,單位為天。

深度冷歸檔類型

取值為1~365的正整數,單位為天。

計費說明

  • 解凍歸檔、冷歸檔、深度冷歸檔類型的Object會產生資料取回容量費用。更多資訊,請參見資料處理費用

  • 解凍歸檔類型的Object會產生Put類型請求次數費用。更多資訊,請參見請求費用

  • 解凍冷歸檔、深度冷歸檔類型的Object會產生取回請求次數費用。更多資訊,請參見請求費用

  • 歸檔類型、冷歸檔、深度冷歸檔類型的Object在解凍過程中以及解凍完成後,均按照相應的儲存類型計算儲存費用。更多資訊,請參見儲存費用

  • 冷歸檔、深度冷歸檔類型的Object在解凍時,會產生一份標準儲存類型的檔案副本用於訪問,該檔案在解凍時間結束前會以標準儲存的儲存費率計算臨時儲存費用。更多資訊,請參見臨時儲存費用

  • 歸檔類型的Object可達到最長7天的解凍期間,冷歸檔、深度冷歸檔類型的Object可達到最長365天的解凍期間,在此期間不再重複收取資料取回費用。

  • 解凍狀態結束後,Object又回到冷凍狀態,再次執行解凍操作會收取資料取回費用。

操作步驟

使用OSS控制台

說明

OSS控制台不支援批量解凍某個目錄下的檔案。如果您需要批量解凍某個目錄下的檔案,您可以使用命令列工具ossutil、阿里雲SDK、REST API。

  1. 登入OSS管理主控台

  2. 單擊Bucket 列表,然後單擊目標Bucket名稱。

  3. 在左側導覽列,選擇文件管理>檔案清單

  4. 在目標檔案右側的操作欄下,選擇more > 解凍

    • Archive Storage類型Object

      • 解凍需要約1分鐘時間,解凍成功後,Object變為解凍狀態。

      • 解凍狀態預設持續1天。您可以通過命令列工具ossutil、阿里雲SDK、REST API延長解凍時間,最多延長7天。超過解凍狀態期間後,檔案又回到冷凍狀態。

    • 冷歸檔或者深度冷歸檔類型Object

      • 副本有效期間:用於設定Object處於解凍狀態的期間。單位為天。 預設為1天。最大為365天。超過解凍狀態期間後,檔案又回到冷凍狀態。

      • 復原模式:用於設定解凍優先順序。根據解凍檔案的大小,實際解凍時間可能會有變化,請以實際解凍時間為準。

使用阿里雲SDK

以下僅列舉常見SDK的解凍檔案的程式碼範例。關於其他SDK的解凍檔案的程式碼範例,請參見SDK簡介

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.*;

public class Demo {
    public static void main(String[] args) throws Exception {
        // Endpoint以華東1(杭州)為例,其它Region請按實際情況填寫。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // 填寫Bucket名稱,例如examplebucket。
        String bucketName = "examplebucket";
        // 填寫不包含Bucket名稱在內的歸檔類型Object的完整路徑。
        String objectName = "exampledir/object";

        // 建立OSSClient執行個體。
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
            ObjectMetadata objectMetadata = ossClient.getObjectMetadata(bucketName, objectName);

            // 校正Object是否為歸檔類型Object。
            StorageClass storageClass = objectMetadata.getObjectStorageClass();
            if (storageClass == StorageClass.Archive) {
                // 解凍Object。
                ossClient.restoreObject(bucketName, objectName);

                // 等待解凍完成。
                do {
                    Thread.sleep(1000);
                    objectMetadata = ossClient.getObjectMetadata(bucketName, objectName);
                } while (!objectMetadata.isRestoreCompleted());
            }

            // 擷取解凍Object。
            OSSObject ossObject = ossClient.getObject(bucketName, objectName);
            ossObject.getObjectContent().close();
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}           
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\CoreOssException;

// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
$provider = new EnvironmentVariableCredentialsProvider();
// Endpoint以華東1(杭州)為例,其他Region請按實際情況填寫。
$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 填寫Bucket名稱,例如examplebucket。
$bucket= "examplebucket";
// 填寫不包含Bucket名稱在內歸檔類型Object的完整路徑,例如srcexampleobject.txt。
$object = "srcexampleobject.txt";

try {
    $config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,
    );
    $ossClient = new OssClient($config);
    // 解凍檔案。
    $ossClient->restoreObject($bucket, $object);
} catch (OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage() . "\n");
    return;
}
print(__FUNCTION__ . ": OK" . "\n");        
const OSS = require('ali-oss')

const client = new OSS({
  //yourRegion填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為oss-cn-hangzhou。
  region: 'yourRegion',
  // 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  //填寫Bucket名稱,例如examplebucket。
  bucket: 'examplebucket',
});

//填寫待解凍的歸檔類型Object名稱,例如exampleobject.txt。
client.restore('exampleobject.txt').then((res) => {
    console.log(res);
}).catch(err => {
    console.log(err);
})
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import RestoreConfiguration

# 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# yourEndpoint填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
# 填寫Bucket名稱,例如examplebucket。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
# 填寫不包含Bucket名稱在內的歸檔類型Object的完整路徑。
objectName = 'yourArchiveObjectName'
# 配置解凍狀態期間,預設為1天。本程式碼範例以解凍狀態期間為2天為例。
days = 2
restore_config= RestoreConfiguration(days=days)
# 發起解凍請求。
bucket.restore_object(objectName, input=restore_config)       
using Aliyun.OSS;
using Aliyun.OSS.Model;
using Aliyun.OSS.Model;
using System.Net;
using System.Text;

// yourEndpoint填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
var endpoint = "yourEndpoint";
// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// 填寫Bucket名稱。
var bucketName = "examplebucket";
// 填寫不包含Bucket名稱在內的歸檔類型Object的完整路徑。
var objectName = "yourObjectName";
// 自訂Object內容。
var objectContent = "More than just cloud.";
int maxWaitTimeInSeconds = 600;
// 建立OssClient執行個體。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
try
{
    // 建立Archive Storage空間。
    var bucket = client.CreateBucket(bucketName, StorageClass.Archive);
    Console.WriteLine("Create Archive bucket succeeded, {0} ", bucket.Name);
}
catch (Exception ex)
{
    Console.WriteLine("Create Archive bucket failed, {0}", ex.Message);
}
// 上傳檔案並設定儲存類型為歸檔類型。
try
{
    byte[] binaryData = Encoding.ASCII.GetBytes(objectContent);
    MemoryStream requestContent = new MemoryStream(binaryData);
    client.PutObject(bucketName, objectName, requestContent);
    Console.WriteLine("Put object succeeded, {0}", objectName);
}
catch (Exception ex)
{
    Console.WriteLine("Put object failed, {0}", ex.Message);
}
var metadata = client.GetObjectMetadata(bucketName, objectName);
string storageClass = metadata.HttpMetadata["x-oss-storage-class"] as string;
if (storageClass != "Archive")
{
    Console.WriteLine("StorageClass is {0}", storageClass);
    return;
}
// 解凍歸檔Object。
RestoreObjectResult result = client.RestoreObject(bucketName, objectName);
Console.WriteLine("RestoreObject result HttpStatusCode : {0}", result.HttpStatusCode);
if (result.HttpStatusCode != HttpStatusCode.Accepted)
{
    throw new OssException(result.RequestId + ", " + result.HttpStatusCode + " ,");
}
while (maxWaitTimeInSeconds > 0)
{
    var meta = client.GetObjectMetadata(bucketName, objectName);
    string restoreStatus = meta.HttpMetadata["x-oss-restore"] as string;
    if (restoreStatus != null && restoreStatus.StartsWith("ongoing-request=\"false\"", StringComparison.InvariantCultureIgnoreCase))
    {
        break;
    }
    Thread.Sleep(1000);
    // 最長等待時間減少1秒。
    maxWaitTimeInSeconds--;
}
if (maxWaitTimeInSeconds == 0)
{
    Console.WriteLine("RestoreObject is timeout. ");
    throw new TimeoutException();
}
else
{
    Console.WriteLine("RestoreObject is successful. ");
}
// 解凍歸檔檔案。
RestoreObjectRequest restore = new RestoreObjectRequest();
// 填寫Bucket名稱,例如examplebucket。
restore.setBucketName("examplebucket");
// 填寫不包含Bucket名稱在內的Object完整路徑,例如exampleobject.txt。
restore.setObjectKey("exampleobject.txt");
OSSAsyncTask task = oss.asyncRestoreObject(restore, new OSSCompletedCallback<RestoreObjectRequest,
        RestoreObjectResult>() {
    @Override
    public void onSuccess(RestoreObjectRequest request, RestoreObjectResult result) {
        Log.i("info", "code::"+result.getStatusCode());

    }

    @Override
    public void onFailure(RestoreObjectRequest request, ClientException clientException,
                          ServiceException serviceException) {
        Log.e("errorMessage", "error: "+serviceException.getRawMessage());

    }
});

task.waitUntilFinished();
package main

import (
	"log"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		log.Fatalf("Failed to create credentials provider: %v", err)
	}

	// 建立OSSClient執行個體。
	// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
	client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
	if err != nil {
		log.Fatalf("Failed to create OSS client: %v", err)
	}

	// 填寫儲存空間名稱,例如examplebucket。
	bucketName := "examplebucket"
	// 填寫不包含Bucket名稱在內的Object的完整路徑,例如exampledir/exampleobject.txt。
	objectName := "exampledir/exampleobject.txt"

	// 擷取儲存空間執行個體。
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		log.Fatalf("Failed to get bucket '%s': %v", bucketName, err)
	}

	// 解凍歸檔類型Object。
	err = bucket.RestoreObject(objectName)
	if err != nil {
		log.Fatalf("Failed to restore object '%s': %v", objectName, err)
	}

	log.Println("ArchiveSample completed")
}
OSSRestoreObjectRequest *request = [OSSRestoreObjectRequest new];
// 填寫Bucket名稱,例如examplebucket。
request.bucketName = @"examplebucket";
// 填寫不包含Bucket名稱在內的Object完整路徑,例如exampleobject.txt。
request.objectKey = @"exampleobject.txt";

OSSTask *restoreObjectTask = [client restoreObject:request];
[restoreObjectTask continueWithBlock:^id _Nullable(OSSTask * _Nonnull task) {
    if (!task.error) {
        NSLog(@"restore object success");
    } else {
        NSLog(@"restore object failed, error: %@", task.error);
    }
    return nil;
}];
// 實現同步阻塞等待任務完成。
// [restoreObjectTask waitUntilFinished];
#include <alibabacloud/oss/OssClient.h>
#include <thread>
#include <chrono>
#include <algorithm>

using namespace AlibabaCloud::OSS;

int main(void)
{
    /*初始化OSS帳號資訊。*/
    
    /*yourEndpoint填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。*/
    std::string Endpoint = "yourEndpoint";
    /*填寫Bucket名稱,例如examplebucket。*/
    std::string BucketName = "examplebucket";
    /*填寫不包含Bucket名稱在內的歸檔類型Object的完整路徑。*/
    std::string ObjectName = "yourObjectName";
  
    /*初始化網路等資源。*/
    InitializeSdk();
    
    ClientConfiguration conf;
    /* 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
  
    /*解凍歸檔Object。*/
    auto outcome = client.RestoreObject(BucketName, ObjectName);
    /*非歸檔Object不能解凍。*/
    if (!outcome.isSuccess()) {
        /*異常處理。*/
        std::cout << "RestoreObject fail,code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }
    std::string onGoingRestore("ongoing-request=\"false\"");
    int maxWaitTimeInSeconds = 600;
    while (maxWaitTimeInSeconds > 0)
    {
        auto meta = client.HeadObject(BucketName, ObjectName);
        std::string restoreStatus = meta.result().HttpMetaData()["x-oss-restore"];
        std::transform(restoreStatus.begin(), restoreStatus.end(), restoreStatus.begin(), ::tolower);
        if (!restoreStatus.empty() && 
        restoreStatus.compare(0, onGoingRestore.size(), onGoingRestore)==0) {
            std::cout << " success, restore status:" << restoreStatus << std::endl;
            /*成功解凍歸檔Object。*/
            break;
        }
        std::cout << " info, WaitTime:" << maxWaitTimeInSeconds
        << "; restore status:" << restoreStatus << std::endl;
        std::this_thread::sleep_for(std::chrono::seconds(10));
        maxWaitTimeInSeconds--;     
    }
    if (maxWaitTimeInSeconds == 0)
    {
        std::cout << "RestoreObject fail, TimeoutException" << std::endl;
    }
    /*釋放網路等資源。*/
    ShutdownSdk();
    return 0;
}
#include "oss_api.h"
#include "aos_http_io.h"
/* yourEndpoint填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。*/
const char *endpoint = "yourEndpoint";
/* 填寫Bucket名稱,例如examplebucket。*/
const char *bucket_name = "examplebucket";
/* 填寫Object完整路徑,完整路徑中不能包含Bucket名稱,例如exampledir/exampleobject.txt。*/
const char *object_name = "exampledir/exampleobject.txt";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* 用char*類型的字串初始化aos_string_t類型。*/
    aos_str_set(&options->config->endpoint, endpoint);
    /* 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    /* 是否使用了CNAME。0表示不使用。*/
    options->config->is_cname = 0;
    /* 用於設定網路相關參數,比如逾時時間等。*/
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
    /* 在程式入口調用aos_http_io_initialize方法來初始化網路、記憶體等全域資源。*/
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* 用於記憶體管理的記憶體池(pool),等價於apr_pool_t。其實現代碼在apr庫中。*/
    aos_pool_t *pool;
    /* 重新建立一個記憶體池,第二個參數是NULL,表示沒有繼承其它記憶體池。*/
    aos_pool_create(&pool, NULL);
    /* 建立並初始化options,該參數包括endpoint、access_key_id、acces_key_secret、is_cname、curl等全域配置資訊。*/
    oss_request_options_t *oss_client_options;
    /* 在記憶體池中分配記憶體給options。*/  
    oss_client_options = oss_request_options_create(pool);
    /* 初始化Client的選項oss_client_options。*/
    init_options(oss_client_options);
    /* 初始化參數。*/
    aos_string_t bucket;
    aos_string_t object;   
    aos_table_t *headers = NULL;
    aos_table_t *resp_headers = NULL; 
    aos_status_t *resp_status = NULL; 
    aos_str_set(&bucket, bucket_name);
    aos_str_set(&object, object_name);
    headers = aos_table_make(pool, 0);
       
    /* 解凍檔案。*/
    do {
        headers = aos_table_make(pool, 0);
        resp_status = oss_restore_object(oss_client_options, &bucket, &object, headers, &resp_headers);
        printf("restore object resp_status->code: %d \n", resp_status->code);
        if (resp_status->code != 409) {
            break;
        } else {
            printf("restore object is already in progress, resp_status->code: %d \n", resp_status->code);
            apr_sleep(5000);
        }
    } while (1);
    /* 釋放記憶體池,相當於釋放了請求過程中各資源分派的記憶體。*/
    aos_pool_destroy(pool);
    /* 釋放之前分配的全域資源。*/
    aos_http_io_deinitialize();
    return 0;
}

使用圖形化管理工具ossbrowser

ossbrowser支援Bucket層級的操作與控制台支援的操作類似,請按照ossbrowser介面指引完成解凍檔案的操作。關於如何使用ossbrowser,請參見快速使用ossbrowser

使用命令列工具ossutil

關於使用ossutil解凍歸檔、冷歸檔、深度冷歸檔類型Object的具體操作,請參見restore(解凍檔案)

使用REST API

如果您的程式自訂要求較高,您可以直接發起REST API請求。直接發起REST API請求需要手動編寫代碼計算簽名。更多資訊,請參見RestoreObject

錯誤碼

常見問題