このトピックでは、アーカイブオブジェクトを復元する方法について説明します。

アーカイブオブジェクトを復元するための完全なコードについては、『GitHub』をご参照ください

アーカイブオブジェクトを読み込む前に復元する必要があります。 非アーカイブオブジェクトに対して、"restoreObject "を呼び出さないでください。

アーカイブオブジェクトの状態変換プロセスは次のとおりです。

  1. アーカイブオブジェクトはフリーズ状態です。
  2. 復元のために送信した後、サーバーはオブジェクトを復元します。 オブジェクトは復元中の状態です。
  3. 復元後にオブジェクトを読むことができます。 オブジェクトが復元された状態は、既定で 1 日続きます。 この期間は最大 7 日間まで延長できます。 この期間が終了すると、オブジェクトはフリーズ状態に戻ります。

次のコードを実行してオブジェクトを復元します。

// This example uses endpoint China East 1 (Hangzhou). Specify the actual endpoint based on your requirements.
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// It is highly risky to log on with AccessKey of an Alibaba Cloud account because the account has permissions on all APIs in OSS. We recommend that you log on as a RAM user to access APIs or perform routine operations and maintenance. To create a RAM account, log on to https://ram.console.aliyun.com.
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";

String bucketName = "<yourBucketName>";
String objectName = "<yourObjectName>";

// Create an OSSClient instance.
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);

ObjectMetadata objectMetadata = ossClient.getObjectMetadata(bucketName, key);

// Verify whether the object is an archive object.// Verify that the file is an archive file.
StorageClass storageClass = objectMetadata.getObjectStorageClass();
if (storageClass == StorageClass.Archive) {
    // Restore the object.
    ossClient.restoreObject(bucketName, objectName);
    
    // Wait until the object is restored.
    do {
        Thread.sleep(1000);
        objectMetadata = ossClient.getObjectMetadata(bucketName, objectName);
    } while (! objectMetadata.isRestoreCompleted());
}

// Obtain the restored object.
OSSObject ossObject = ossClient.getObject(bucketName, objectName);
ossObject.getObjectContent().close();

// Close your OSSClient.
ossClient.shutdown();

アーカイブストレージクラスの詳細については、 「ストレージクラスの概要」をご参照ください。