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

Object Storage Service:Copy a file (iOS SDK)

最終更新日:Dec 06, 2025

このトピックでは、同一リージョン内のバケット内、またはバケット間でオブジェクトをコピーする方法について説明します。

注意事項

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

  • ファイルをコピーするには、ソースファイルに対する読み取り権限と、宛先バケットに対する読み取り/書き込み権限が必要です。

  • リージョン間のコピー操作はサポートされていません。 たとえば、中国 (杭州) リージョンのバケットから中国 (青島) リージョンのバケットにファイルをコピーすることはできません。

  • コピーするファイルのサイズは 1 GB を超えることはできません。

権限

デフォルトでは、Alibaba Cloud アカウントはすべての権限を持っています。Alibaba Cloud アカウント配下の RAM ユーザーまたは RAM ロールは、デフォルトではいかなる権限も持っていません。Alibaba Cloud アカウントまたはアカウント管理者は、RAM ポリシーまたはバケットポリシーを通じて操作権限を付与する必要があります。

API

アクション

説明

CopyObject

oss:GetObject

同一リージョン内のバケット内、またはバケット間でオブジェクトをコピーします。

oss:PutObject

oss:GetObjectVersion

versionId を通じてソースオブジェクトのバージョンを指定する場合、この権限も必要です。

oss:GetObjectTagging

x-oss-tagging を通じてオブジェクトタグをコピーする場合、これらの権限が必要です。

oss:PutObjectTagging

oss:GetObjectVersionTagging

versionId を通じてソースオブジェクトの特定バージョンのタグを指定する場合、この権限も必要です。

kms:GenerateDataKey

オブジェクトをコピーする際、宛先オブジェクトのメタデータに X-Oss-Server-Side-Encryption: KMS が含まれている場合、これら 2 つの権限が必要です。

kms:Decrypt

サンプルコード

次のコードは、ファイルをコピーする方法の例を示しています。

OSSCopyObjectRequest * copy = [OSSCopyObjectRequest new];
// ソースバケットの名前を指定します。
copy.sourceBucketName = @"sourcebucket";
// ソースバケット内のオブジェクトの完全なパスを指定します。
copy.sourceObjectKey = @"dir1/srcobject.txt";
// 宛先バケットの名前を指定します。
copy.bucketName = @"destbucket";
// 宛先バケット内のオブジェクトの完全なパスを指定します。
copy.objectKey = @"dir2/destobject.txt";
NSMutableDictionary *objectMeta = [NSMutableDictionary dictionary];
// アクセス制御リスト (ACL) を設定します。 この例では、値は public-read に設定されています。
[objectMeta setValue:@"public-read" forKey:@"x-oss-object-acl"];
// ストレージクラスを設定します。 この例では、値は Standard に設定されています。
[objectMeta setValue:@"Standard" forKey:@"x-oss-storage-class"];
// 同じ名前のオブジェクトを上書きするかどうかを指定します。 x-oss-forbid-overwrite を指定しない場合、オブジェクトはデフォルトで上書きされます。
// x-oss-forbid-overwrite を false に設定すると、オブジェクトは上書きできます。 x-oss-forbid-overwrite を true に設定すると、オブジェクトは上書きできません。 同じ名前のオブジェクトが存在する場合、エラーが報告されます。
[objectMeta setValue:@"true" forKey:@"x-oss-forbid-overwrite"];
// コピー操作は、ソースオブジェクトの ETag が指定した ETag と一致する場合にのみ実行されます。
[objectMeta setValue:@"5B3C1A2E053D763E1B002CC607C5****" forKey:@"x-oss-copy-source-if-match"];
// コピー操作は、ソースオブジェクトの ETag が指定した ETag と一致しない場合にのみ実行されます。
[objectMeta setValue:@"5B3C1A2E053D763E1B002CC607C5****" forKey:@"x-oss-copy-source-if-none-match"];
// コピー操作は、オブジェクトの最終更新日時が 2021-12-09T07:01:56.000Z 以前である場合にのみ実行されます。
[objectMeta setValue:@"2021-12-09T07:01:56.000Z" forKey:@"x-oss-copy-source-if-unmodified-since"];
// コピー操作は、オブジェクトの最終更新日時が 2021-12-15T07:01:56.000Z より後である場合にのみ実行されます。
[objectMeta setValue:@"2021-12-15T07:01:56.000Z" forKey:@"x-oss-copy-source-if-modified-since"];
// メタデータをソースオブジェクトから宛先オブジェクトにコピーします。
[objectMeta setValue:@"COPY" forKey:@"x-oss-metadata-directive"];
// タグをソースオブジェクトから宛先オブジェクトにコピーします。
[objectMeta setValue:@"Copy" forKey:@"x-oss-tagging-directive"];
// OSS が宛先オブジェクトを作成するために使用するサーバ側暗号化アルゴリズムを指定します。
[objectMeta setValue:@"KMS" forKey:@"x-oss-server-side-encryption"];
// KMS によって管理されるカスタマーマスターキー (CMK)。 このパラメーターは、x-oss-server-side-encryption が KMS に設定されている場合にのみ有効です。
[objectMeta setValue:@"9468da86-3509-4f8d-a61e-6eab1eac****" forKey:@"x-oss-server-side-encryption-key-id"];
copy.objectMeta = objectMeta;


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];

関連ドキュメント

CopyObject API 操作の詳細については、「CopyObject」をご参照ください。