このトピックでは、アーカイブオブジェクトを復元する方法について説明します。
アーカイブオブジェクトを復元するための完全なコードについては、『GitHub』をご参照ください
アーカイブオブジェクトを読み込む前に復元する必要があります。 非アーカイブオブジェクトに対して、"restoreObject "を呼び出さないでください。
アーカイブオブジェクトの状態変換プロセスは次のとおりです。
- アーカイブオブジェクトはフリーズ状態です。
- 復元のために送信した後、サーバーはオブジェクトを復元します。 オブジェクトは復元中の状態です。
- 復元後にオブジェクトを読むことができます。 オブジェクトが復元された状態は、既定で 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();
アーカイブストレージクラスの詳細については、 「ストレージクラスの概要」をご参照ください。