アーカイブオブジェクトへのリアルタイムアクセスが無効になっている場合、オブジェクトを読み取る前に解凍する必要があります。コールドアーカイブオブジェクトとディープコールドアーカイブオブジェクトはリアルタイムアクセスをサポートしていないため、読み取る前に解凍する必要があります。アーカイブオブジェクトの解凍には通常数分かかります。コールドアーカイブオブジェクトの解凍には通常数時間かかります。ディープコールドアーカイブオブジェクトの解凍には通常 12 時間から 48 時間かかります。実際の解凍時間は状況によって異なります。このトピックでは、アーカイブ、コールドアーカイブ、ディープコールドアーカイブの各オブジェクトを解凍する方法について説明します。
注意事項
RestoreObject メソッドは、アーカイブ、コールドアーカイブ、ディープコールドアーカイブのオブジェクトにのみ適用されます。
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスするには、内部エンドポイントを使用します。サポートされているリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス認証情報は環境変数から取得します。アクセス認証情報の設定方法の詳細については、「アクセス認証情報の設定」をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「一般的なシナリオの設定例」をご参照ください。
オブジェクトを解凍するには、
oss:RestoreObject権限が必要です。詳細については、「RAM ユーザーへのカスタム権限の付与」をご参照ください。
アーカイブオブジェクトの解凍
次のコードに、アーカイブオブジェクトを解凍する方法を示します。
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
public class Demo {
public static void main(String[] args) throws Exception {
// この例では、中国 (杭州) リージョンを使用します。実際のエンドポイントを指定してください。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス認証情報を取得します。このコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// バケット名を設定します。例: examplebucket。
String bucketName = "examplebucket";
// アーカイブオブジェクトの完全なパスを設定します。バケット名は含めないでください。
String objectName = "exampledir/object";
// バケットが所在するリージョンを設定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
String region = "cn-hangzhou";
// OSSClient インスタンスを作成します。
// OSSClient インスタンスが不要になったら、shutdown メソッドを呼び出してリソースを解放します。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
ObjectMetadata objectMetadata = ossClient.getObjectMetadata(bucketName, objectName);
// オブジェクトがアーカイブオブジェクトであるかどうかを確認します。
StorageClass storageClass = objectMetadata.getObjectStorageClass();
if (storageClass == StorageClass.Archive) {
// オブジェクトを解凍します。
ossClient.restoreObject(bucketName, objectName);
// 解凍が完了するまで待ちます。
do {
Thread.sleep(1000);
objectMetadata = ossClient.getObjectMetadata(bucketName, objectName);
} while (!objectMetadata.isRestoreCompleted());
}
// 解凍されたオブジェクトを取得します。
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();
}
}
}
} コールドアーカイブオブジェクトの解凍
次のコードに、コールドアーカイブオブジェクトを解凍する方法を示します。
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
public class Demo {
public static void main(String[] args) throws Exception {
// この例では、中国 (杭州) リージョンを使用します。実際のエンドポイントを指定してください。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス認証情報を取得します。このコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// バケット名を設定します。例: examplebucket。
String bucketName = "examplebucket";
// コールドアーカイブオブジェクトの完全なパスを設定します。バケット名は含めないでください。
String objectName = "exampledir/object";
// バケットが所在するリージョンを設定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
String region = "cn-hangzhou";
// OSSClient インスタンスを作成します。
// OSSClient インスタンスが不要になったら、shutdown メソッドを呼び出してリソースを解放します。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// コールドアーカイブオブジェクトの解凍優先度を設定します。
// RestoreTier.RESTORE_TIER_EXPEDITED: オブジェクトは 1 時間以内に解凍されます。
// RestoreTier.RESTORE_TIER_STANDARD: オブジェクトは 2~5 時間以内に解凍されます。
// RestoreTier.RESTORE_TIER_BULK: オブジェクトは 5~12 時間以内に解凍されます。
RestoreJobParameters jobParameters = new RestoreJobParameters(RestoreTier.RESTORE_TIER_BULK);
// 解凍パラメーターを設定します。この例では、解凍を 5 時間以内に完了させ、オブジェクトを 2 日間解凍状態に保つ方法を示します。
// 最初のパラメーターは、オブジェクトを解凍状態に保つ日数を指定します。デフォルトは 1 日です。このパラメーターは、アーカイブオブジェクトとコールドアーカイブオブジェクトに適用されます。
// 2 番目のパラメーター jobParameters は、解凍優先度を指定します。これはコールドアーカイブオブジェクトにのみ適用されます。
RestoreConfiguration configuration = new RestoreConfiguration(2, jobParameters);
// 解凍リクエストを送信します。
ossClient.restoreObject(bucketName, objectName, configuration);
} 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();
}
}
}
}ディープコールドアーカイブオブジェクトの解凍
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
public class Demo {
public static void main(String[] args) throws Exception {
// この例では、中国 (杭州) リージョンを使用します。実際のエンドポイントを指定してください。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス認証情報を取得します。このコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// バケット名を設定します。例: examplebucket。
String bucketName = "examplebucket";
// ディープコールドアーカイブオブジェクトの完全なパスを設定します。バケット名は含めないでください。
String objectName = "exampledir/object";
// バケットが所在するリージョンを設定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
String region = "cn-hangzhou";
// OSSClient インスタンスを作成します。
// OSSClient インスタンスが不要になったら、shutdown メソッドを呼び出してリソースを解放します。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// 解凍優先度を設定します。この例では RESTORE_TIER_STANDARD を使用します。
// RestoreTier.RESTORE_TIER_EXPEDITED: オブジェクトは 12 時間以内に解凍されます。
// RestoreTier.RESTORE_TIER_STANDARD: オブジェクトは 48 時間以内に解凍されます。
RestoreJobParameters jobParameters = new RestoreJobParameters(RestoreTier.RESTORE_TIER_STANDARD);
// オブジェクトが解凍状態を維持する期間を設定します。デフォルトは 1 日です。この例では、期間を 2 日に設定します。
RestoreConfiguration configuration = new RestoreConfiguration(2, jobParameters);
// 解凍リクエストを送信します。
ossClient.restoreObject(bucketName, objectName, configuration);
} 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();
}
}
}
}関連ドキュメント
オブジェクトを解凍するための完全なサンプルコードについては、「GitHub の例」をご参照ください。
オブジェクトを解凍するための API 操作の詳細については、「RestoreObject」をご参照ください。