すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:オブジェクトのストレージクラスの変換 (iOS SDK)

最終更新日:Nov 30, 2025

Object Storage Service (OSS) は、ホットデータからコールドデータまで、さまざまなデータストレージシナリオに対応するために、Standard、Infrequent Access (IA)、Archive、Cold Archive、Deep Cold Archive といったストレージクラスを提供しています。このトピックでは、オブジェクトのストレージクラスを変換する方法について説明します。

注意事項

  • このトピックのサンプルコードを実行する前に、カスタムドメイン名やセキュリティトークンサービス (STS) などの方法を使用して OSSClient インスタンスを作成する必要があります。詳細については、「初期化」をご参照ください。

  • オブジェクトのストレージクラスを Standard または IA から Archive に変換

    次に、examplebucket という名前のバケットのルートディレクトリに保存されている exampleobject.txt という名前のオブジェクトのストレージクラスを Standard または IA から Archive に変換するサンプルコードを示します。

    OSSCopyObjectRequest * copy = [OSSCopyObjectRequest new];
    copy.sourceBucketName = @"examplebucket";
    copy.sourceObjectKey = @"exampleobject.txt";
    copy.bucketName = @"examplebucket";
    copy.objectKey = @"exampleobject.txt";
    // exampleobject.txt オブジェクトのストレージクラスを 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;
    }];
    // 同期ブロッキングを実装して、タスクが完了するのを待ちます。
    // [task waitUntilFinished];  
  • オブジェクトのストレージクラスを Archive、Cold Archive、または Deep Cold Archive から IA に変換

    次に、examplebucket という名前のバケットのルートディレクトリに保存されている exampleobject.txt という名前のオブジェクトのストレージクラスを Archive、Cold Archive、または Deep Cold Archive から IA に変換するサンプルコードを示します。

    NSString *bucketName = @"examplebucket";
    NSString *objectKey = @"exampleobject.txt";
    
    // 次の行では、オブジェクトのストレージクラスが Archive かどうかを確認します。オブジェクトのストレージクラスが Archive の場合、ストレージクラスを変換する前にオブジェクトを解凍する必要があります。
    // オブジェクトのストレージクラスが Cold Archive または Deep Cold Archive かどうかを確認するには、isArchived を isColdArchived または 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) {
        // オブジェクトを解凍します。
        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];
    
        // オブジェクトが解凍されるまで待ちます。
        __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);
    }
    
    // exampleobject.txt オブジェクトのストレージクラスを 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 インスタンスを初期化する方法の詳細については、「初期化」をご参照ください。