Object Storage Service (OSS) は、ホットデータからコールドデータまでのさまざまなデータストレージシナリオをカバーするために、標準、低頻度アクセス (IA) 、アーカイブ、コールドアーカイブ、およびディープコールドアーカイブのストレージクラスを提供します。 このトピックでは、オブジェクトのストレージクラスを変換する方法について説明します。
使用上の注意
このトピックのサンプルコードを実行する前に、カスタムドメイン名やSecurity Token Service (STS) などの方法を使用してOSSClientインスタンスを作成する必要があります。 詳細については、「初期化」をご参照ください。
例
オブジェクトのストレージクラスをStandardまたはIAからArchiveに変換する
次のサンプルコードでは、exampleobject.txtという名前のオブジェクトのストレージクラスをStandardまたはIAからArchiveに変換する方法の例を示します。 この例では、オブジェクトはexamplebucketという名前のバケットのルートディレクトリに格納されます。
OSSCopyObjectRequest * copy = [OSSCopyObjectRequest new]; copy.sourceBucketName = @"examplebucket"; copy.sourceObjectKey = @"exampleobject.txt"; copy.bucketName = @"examplebucket"; copy.objectKey = @"exampleobject.txt"; // Set the storage class of the exampleobject.txt object to Archive. copy.objectMeta = @{@"x-oss-storage-class" : @"Archive"}; OSSTask * task = [client copyObject:copy]; [task continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"copy object success!"); } else { NSLog(@"copy object failed, error: %@" , task.error); } return nil; }]; // Implement synchronous blocking to wait for the task to complete. // [task waitUntilFinished];
オブジェクトのストレージクラスをアーカイブ、コールドアーカイブ、またはディープコールドアーカイブからIAに変換する
次のサンプルコードは、exampleobject.txtという名前のオブジェクトのストレージクラスをArchive、Cold Archive、またはDeep Cold ArchiveからIAに変換する方法の例を示しています。 この例では、オブジェクトはexamplebucketという名前のバケットのルートディレクトリに格納されます。
NSString *bucketName = @"examplebucket"; NSString *objectKey = @"exampleobject.txt"; // The following lines check whether the storage class of the object is Archive. If the storage class of the object is Archive, you must restore the object before you can convert the storage class of the object. // To check whether the storage class of the object is Cold Archive or Deep Cold Archive, replace isArchived with isColdArchived or isDeepColdArchived. __block bool isArchived = false; OSSHeadObjectRequest *headRq = [OSSHeadObjectRequest new]; headRq.bucketName = bucketName; headRq.objectKey = objectKey; [[[client headObject:headRq] continueWithBlock:^id _Nullable(OSSTask * _Nonnull task) { if (!task.error) { OSSHeadObjectResult *headRs = task.result; isArchived = [headRs.httpResponseHeaderFields[@"x-oss-storage-class"] isEqualToString:@"Archive"]; } else { NSLog(@"head object fail! error: %@", task.error); } return nil; }] waitUntilFinished]; if (isArchived) { // Restore the object. OSSRestoreObjectRequest *restoreRequest = [OSSRestoreObjectRequest new]; restoreRequest.bucketName = bucketName; restoreRequest.objectKey = objectKey; [[[client restoreObject:restoreRequest] continueWithBlock:^id _Nullable(OSSTask * _Nonnull task) { if (!task.error) { NSLog(@"restore object success!"); } else { NSLog(@"restore object fail! error: %@", task.error); } return nil; }] waitUntilFinished]; // Wait until the object is restored. __block bool isRestored = false; do { sleep(1); headRq = [OSSHeadObjectRequest new]; headRq.bucketName = bucketName; headRq.objectKey = objectKey; [[[client headObject:headRq] continueWithBlock:^id _Nullable(OSSTask * _Nonnull task) { if (!task.error) { OSSHeadObjectResult *headRs = task.result; isRestored = (headRs.httpResponseHeaderFields[@"x-oss-restore"] != nil && ![headRs.httpResponseHeaderFields[@"x-oss-restore"] isEqualToString:@"ongoing-request=\"true\""]); } else { NSLog(@"head object fail! error: %@", task.error); } return nil; }] waitUntilFinished]; } while (!isRestored); } // Set the storage class of the exampleobject.txt object to IA. OSSCopyObjectRequest *copy = [OSSCopyObjectRequest new]; copy.bucketName = bucketName; copy.objectKey = objectKey; copy.sourceBucketName = bucketName; copy.sourceObjectKey = objectKey; copy.objectMeta = @{@"x-oss-storage-class": @"IA"}; [[[client copyObject:copy] continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"copy object success!"); } else { NSLog(@"copy object failed, error: %@" , task.error); } return nil; }] waitUntilFinished];
関連ドキュメント
オブジェクトのストレージクラスを変換するために呼び出すことができるAPI操作の詳細については、「CopyObject」をご参照ください。
OSSClientインスタンスを初期化する方法の詳細については、「初期化」をご参照ください。