CopyObject 操作を使用すると、同一リージョン内の同じバケットまたは異なるバケット間でオブジェクトをコピーできます。
バージョン管理
デフォルトでは、x-oss-copy-source はオブジェクトの現行バージョンをコピーします。特定のバージョンをコピーするには、x-oss-copy-source にバージョン ID を含めます。指定されたソースバージョンが削除マーカーである場合、OSS はオブジェクトが存在しないことを示す 404 エラーを返します。
以前のバージョンを同じバケットにコピーすることで、オブジェクトの以前のバージョンを現行バージョンとして復元できます。OSS はその以前のバージョンを現行バージョンとして設定します。
コピー先バケットでバージョン管理が有効になっている場合、OSS は新しくコピーされたオブジェクトに対して一意のバージョン ID を自動的に生成します。このバージョン ID は、x-oss-version-id レスポンスヘッダーで返されます。コピー先バケットでバージョン管理が無効または一時停止されている場合、OSS は新しいオブジェクトに対して null バージョン ID を持つバージョンを生成します。この新しいバージョンは、null バージョン ID を持つ既存のバージョンを上書きします。
制限事項
オブジェクトサイズの制限
コピー元バケットとコピー先バケットが同じで、コピー操作中にオブジェクトの暗号化方式またはストレージクラスを変更しない場合、オブジェクトは 5 GB を超えることができます。
コピー元バケットとコピー先バケットが異なり、コピー操作中にオブジェクトの暗号化方式またはストレージクラスを変更しない場合、オブジェクトは 5 GB を超えることはできません。
コピー操作中にオブジェクトの暗号化方式またはストレージクラスを変更する場合、オブジェクトは 1 GB を超えることはできません。オブジェクトが 1 GB を超える場合は、UploadPartCopy 操作を使用する必要があります。
権限
CopyObject と UploadPartCopy の両方の操作には、コピー元オブジェクトに対する読み取り権限が必要です。
バージョン管理が無効になっているバケットで CopyObject 操作を使用し、コピー元オブジェクトとコピー先オブジェクトが同じ場合:
暗号化方式またはストレージクラスが変更されない場合、OSS はオブジェクトのメタデータのみを変更し、その内容はコピーしません。
暗号化方式またはストレージクラスが変更された場合、OSS はメタデータを変更し、オブジェクトの内容もコピーします。
コピー元オブジェクトがシンボリックリンクの場合
シンボリックリンクに対して CopyObject 操作を使用すると、シンボリックリンクのみがコピーされます。シンボリックリンクが指すファイルの内容はコピーされません。
バケットで階層型名前空間が有効になっている場合
バケットで階層型名前空間が有効になっている場合、ディレクトリをコピーすることはできません。
ファイルの上書き競合の防止
ファイルの上書き防止を有効にしている場合、CopyObject を使用してファイルのストレージクラスを標準ストレージからアーカイブストレージなどに変更することはできません。代わりに、自動ライフサイクル変換を使用してください。
権限
デフォルトでは、Alibaba Cloud アカウントは完全な権限を持っています。Alibaba Cloud アカウント配下の RAM ユーザーまたは RAM ロールは、デフォルトではいかなる権限も持っていません。Alibaba Cloud アカウントまたはアカウント管理者は、RAM ポリシーまたはバケットポリシーを通じて操作権限を付与する必要があります。
API | アクション | 定義 |
CopyObject |
| 同一リージョン内のバケット内またはバケット間でオブジェクトをコピーします。 |
| ||
| versionId を通じてコピー元オブジェクトのバージョンを指定する場合、この権限も必要です。 | |
| x-oss-tagging を通じてオブジェクトタグをコピーする場合、これらの権限が必要です。 | |
| ||
| versionId を通じてコピー元オブジェクトの特定バージョンのタグを指定する場合、この権限も必要です。 | |
| オブジェクトをコピーする際に、コピー先オブジェクトのメタデータに X-Oss-Server-Side-Encryption: KMS が含まれている場合、これら 2 つの権限が必要です。 | |
|
課金
CopyObject 操作の各呼び出しは、コピー先バケットに対する 1 回の PUT リクエストとしてカウントされます。
CopyObject 操作により、コピー先バケットのストレージ使用量が増加します。
CopyObject 操作を使用してオブジェクトのストレージクラスを変更すると、データの上書きが発生します。たとえば、低頻度アクセス (IA) オブジェクトが作成から 10 日以内に上書きされ、そのストレージクラスが標準ストレージに変更された場合、最低保管期間が満たされないため、20 日分の IA ストレージ料金が課金されます。ストレージ料金の詳細については、「ストレージ料金」をご参照ください。
CopyObject 操作を呼び出す際、コピー元オブジェクトが IA オブジェクトである場合、IA ストレージのデータ取得料金が発生します。コピー元オブジェクトが RestoreObject を使用して解凍されていないアーカイブストレージオブジェクトで、バケットでアーカイブオブジェクトのリアルタイムアクセスが有効になっている場合、リアルタイムアクセスのデータ取得料金が発生します。これらの料金は、コピー元バケットを所有するアカウントに課金されます。課金の詳細については、「データ処理料金」をご参照ください。
リクエスト構文
PUT /DestObjectName HTTP/1.1
Host: DestBucketName.oss-cn-hangzhou.aliyuncs.com
Date: GMT Date
Authorization: SignatureValue
x-oss-copy-source: /SourceBucketName/SourceObjectNameリクエストヘッダー
コピー操作のすべてのリクエストヘッダーは x-oss- で始まります。したがって、これらすべてのリクエストヘッダーを署名文字列に追加する必要があります。
名前 | タイプ | 必須 | 値 | 説明 |
x-oss-forbid-overwrite | String | いいえ | true | 同じ名前を持つ既存のコピー先オブジェクトを上書きするかどうかを指定します。コピー先バケットでバージョン管理が有効または一時停止されている場合、x-oss-forbid-overwrite リクエストヘッダーは無効です。これは、同じ名前のオブジェクトの上書きが許可されることを意味します。
x-oss-forbid-overwrite リクエストヘッダーを設定すると、QPS 処理性能が低下します。多くの操作 (QPS > 1000) で x-oss-forbid-overwrite リクエストヘッダーを使用するには、ビジネスに影響を与えないように、テクニカルサポートにご連絡ください。 デフォルト値:false |
x-oss-copy-source | String | はい | /oss-example/oss.jpg | コピー操作のコピー元アドレスを指定します。 デフォルト値:なし |
x-oss-copy-source-if-match | String | いいえ | 5B3C1A2E053D763E1B002CC607C5**** | コピー元オブジェクトの ETag が指定した ETag と一致する場合にのみ、コピー操作が実行され、200 OK が返されます。 デフォルト値:なし |
x-oss-copy-source-if-none-match | String | いいえ | 5B3C1A2E053D763E1B002CC607C5**** | コピー元オブジェクトの ETag が指定した ETag と一致しない場合にのみ、コピー操作が実行され、200 OK が返されます。 デフォルト値:なし |
x-oss-copy-source-if-unmodified-since | String | いいえ | Mon, 11 May 2020 08:16:23 GMT | 指定した時刻がオブジェクトの実際の変更時刻と同じかそれ以降である場合にのみ、オブジェクトがコピーされ、200 OK が返されます。 デフォルト値:なし |
x-oss-copy-source-if-modified-since | String | いいえ | Mon, 11 May 2020 08:16:23 GMT | 指定した時刻がオブジェクトの実際の変更時刻より前である場合にのみ、オブジェクトがコピーされ、200 OK が返されます。 デフォルト値:なし |
x-oss-metadata-directive | String | いいえ | COPY | コピー先オブジェクトのメタデータをどのように設定するかを指定します。
重要 コピー元オブジェクトとコピー先オブジェクトが同じで、バージョン管理が有効になっていない場合、x-oss-metadata-directive の値に関係なく、コピー元オブジェクトのメタデータは無視されます。コピー先オブジェクトは、リクエストで指定されたメタデータを使用します。 |
x-oss-server-side-encryption | String | いいえ | AES256 | OSS がコピー先オブジェクトを作成するために使用するサーバー側暗号化アルゴリズムを指定します。 有効な値:AES256 および KMS 重要 シンボリックリンクオブジェクトをコピーする際には、x-oss-server-side-encryption を指定できません。 KMS 暗号化アルゴリズムは、KMS スイートを購入した後にのみ使用できます。そうでない場合、OSS は KmsServiceNotEnabled エラーを返します。
|
x-oss-server-side-encryption-key-id | String | いいえ | 9468da86-3509-4f8d-a61e-6eab1eac**** | KMS によって管理されるカスタマーマスターキー (CMK) を指定します。 このパラメーターは、x-oss-server-side-encryption が KMS に設定されている場合にのみ有効です。 |
x-oss-object-acl | String | いいえ | private | OSS でコピー先オブジェクトが作成される際のアクセス権限を指定します。 有効な値:
アクセス権限の詳細については、「オブジェクト ACL」をご参照ください。 |
x-oss-storage-class | String | いいえ | Standard | オブジェクトのストレージクラスを指定します。 どのストレージクラスのバケットでも、オブジェクトをアップロードする際にこのヘッダーを指定すると、アップロードされたオブジェクトは指定されたストレージクラスに格納されます。たとえば、低頻度アクセス (IA) バケットにオブジェクトをアップロードする際に x-oss-storage-class を Standard に設定すると、オブジェクトは標準ストレージオブジェクトとして格納されます。 有効な値:
ストレージクラスの詳細については、「ストレージクラス」をご参照ください。 |
x-oss-tagging | String | いいえ | a:1 | オブジェクトのタグを指定します。複数のタグを同時に指定できます。例:TagA=A&TagB=B。 説明 キーと値は URL エンコードする必要があります。項目に等号 (=) が含まれていない場合、値は空の文字列と見なされます。 |
x-oss-tagging-directive | String | いいえ | Copy | コピー先オブジェクトのタグをどのように設定するかを指定します。有効な値:
|
この操作では、Host や Date などの共通リクエストヘッダーも使用します。詳細については、「共通リクエストヘッダー」をご参照ください。
レスポンスヘッダー
この操作では、共通レスポンスヘッダーのみを使用します。詳細については、「共通レスポンスヘッダー」をご参照ください。
レスポンス要素
名前 | タイプ | 例 | 説明 |
CopyObjectResult | コンテナー | N/A | CopyObject 操作の結果を格納するコンテナーです。 デフォルト値:なし |
ETag | String | 5B3C1A2E053D763E1B002CC607C5**** | コピー先オブジェクトの ETag です。 親要素:CopyObjectResult |
LastModified | String | Fri, 24 Feb 2012 07:18:48 GMT | コピー先オブジェクトが最後に更新された時刻です。 親要素:CopyObjectResult |
例
バージョン管理が無効
リクエストの例
PUT /test%2FAK.txt HTTP/1.1 Host: tesx.oss-cn-zhangjiakou.aliyuncs.com Accept-Encoding: identity User-Agent: aliyun-sdk-python/2.6.0(Windows/7/AMD64;3.7.0) Accept: text/html Connection: keep-alive x-oss-copy-source: /test/AK.txt date: Fri, 28 Dec 2018 09:41:55 GMT authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,AdditionalHeaders=content-length,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e Content-Length: 0レスポンスの例
x-oss-hash-crc64ecmaは、オブジェクトの 64 ビット CRC 値を示します。この 64 ビット CRC 値は、CRC-64/XZ 標準に基づいて計算されます。CopyObject 操作は、生成されたオブジェクトが 64 ビット CRC 値を持つことを保証しません。HTTP/1.1 200 OK Server: AliyunOSS Date: Fri, 28 Dec 2018 09:41:56 GMT Content-Type: application/xml Content-Length: 184 Connection: keep-alive x-oss-request-id: 5C25EFE4462CE00EC6D87156 ETag: "F2064A169EE92E9775EE5324D0B1****" x-oss-hash-crc64ecma: 12753002859196105360 x-oss-server-time: 150 <?xml version="1.0" encoding="UTF-8"?> <CopyObjectResult> <ETag>"F2064A169EE92E9775EE5324D0B1****"</ETag> <LastModified>2018-12-28T09:41:56.000Z</LastModified> </CopyObjectResult>バージョン ID を指定せずにオブジェクトをコピーする
リクエストの例
PUT /dest-object-example HTTP/1.1 Host: versioning-copy.oss-cn-hangzhou.aliyuncs.com Date: Tue, 09 Apr 2019 03:45:32 GMT Authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e x-oss-copy-source: /versioning-copy-source/source-objectレスポンスの例
この例では、
x-oss-copy-source-version-idはコピー元オブジェクトのバージョン ID であり、この場合は現行バージョンです。x-oss-version-idは新しくコピーされたオブジェクトのバージョン ID です。HTTP/1.1 200 OK x-oss-copy-source-version-id: CAEQNRiBgIC28uaA0BYiIDY5OGIwNmNlNjYyMTRjNTc4N2M2OGNiMjZkZTQ2**** x-oss-version-id: CAEQNxiBgIDG8uaA0BYiIGZhZDRkZTk5Zjg3YzRhNzdiMWEwZGViNDM1NTFh**** x-oss-request-id: 5CAC155CB7AEADE01700**** Content-Type: application/xml Content-Length: 184 Connection: keep-alive Date: Tue, 09 Apr 2019 03:45:32 GMT Server: AliyunOSS <?xml version="1.0" encoding="UTF-8"?> <CopyObjectResult> <ETag>"C81E728D9D4C2F636F067F89CC14****"</ETag> <LastModified>2019-04-09T03:45:32.000Z</LastModified> </CopyObjectResult>バージョン ID を指定してオブジェクトをコピーする
リクエストの例
PUT /dest-object-example HTTP/1.1 Host: versioning-copy.oss-cn-hangzhou.aliyuncs.com Date: Tue, 09 Apr 2019 03:45:32 GMT Authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e x-oss-copy-source: /versioning-copy-source/source-object?versionId=CAEQNRiBgICv8uaA0BYiIDliZDc3MTc1NjE5MjRkMDI4ZGU4MTZkYjY1ZDgy****レスポンスの例
この例では、
x-oss-copy-source-version-idはコピー元オブジェクトのバージョン ID であり、x-oss-copy-sourceリクエストヘッダーで指定されたバージョンです。x-oss-version-idは新しくコピーされたオブジェクトのバージョン ID です。HTTP/1.1 200 OK x-oss-copy-source-version-id: CAEQNRiBgICv8uaA0BYiIDliZDc3MTc1NjE5MjRkMDI4ZGU4MTZkYjY1ZDgy**** x-oss-version-id: CAEQNxiBgMDP8uaA0BYiIDIyNGNhZDQ1M2M3NzRkZThiNzE0N2I3ZDkxOWY4**** x-oss-request-id: 5CAC155CB7AEADE01700**** Content-Type: application/xml Content-Length: 184 Connection: keep-alive Date: Tue, 09 Apr 2019 03:45:32 GMT Server: AliyunOSS <?xml version="1.0" encoding="UTF-8"?> <CopyObjectResult> <ETag>"C4CA4238A0B923820DCC509A6F75****"</ETag> <LastModified>2019-04-09T03:45:32.000Z</LastModified> </CopyObjectResult>
SDK
この操作は、以下の言語のソフトウェア開発キット (SDK) を使用して呼び出すことができます。
ossutil コマンドラインツール
CopyObject 操作に対応する ossutil コマンドについては、「copy-object」をご参照ください。
エラーコード
エラーコード | HTTP ステータスコード | 説明 |
InvalidArgument | 400 | x-oss-storage-class などのパラメーターの値が無効です。 |
Precondition Failed | 412 | このエラーは、以下のいずれかの理由で返されます:
|
Not Modified | 304 | このエラーは、以下のいずれかの理由で返されます:
|
KmsServiceNotEnabled | 403 | x-oss-server-side-encryption を KMS に設定しましたが、KMS スイートを購入していません。 |
FileAlreadyExists | 409 | このエラーは、以下のいずれかの理由で返されます:
|
FileImmutable | 409 | 保護状態にあるバケット内のデータを削除または変更しようとすると、このエラーが返されます。 |
よくある質問
CopyObject はファイルのバッチコピーをサポートしていますか?
いいえ、サポートしていません。CopyObject 操作は単一のファイルをコピーするために使用されます。複数のファイルをバッチでコピーするには、ossutil を使用できます。詳細については、「cp (ファイルのコピー)」をご参照ください。