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

Object Storage Service:CopyObject

最終更新日:Feb 23, 2024

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

バージョン管理

既定では、CopyObjectリクエストのx-oss-copy-sourceヘッダーは、オブジェクトの現在のバージョンがコピーされることを指定します。 x-oss-copy-sourceにversionIdを追加して、指定したバージョンのオブジェクトをコピーできます。 コピーするオブジェクトの指定されたバージョンが削除マーカーである場合、object Storage Service (OSS) はオブジェクトが存在しないことを示す404 Not Foundを返します。

以前のバージョンのオブジェクトを現在のバージョンに復元するには、オブジェクトが格納されているバケットに以前のバージョンのオブジェクトをコピーします。 その後、OSSはオブジェクトの以前のバージョンを現在のバージョンとして保存します。

宛先バケットのバージョン管理が有効になっている場合、OSSは宛先オブジェクトの一意のバージョンIDを自動的に生成します。 バージョンIDは、応答内のx-oss-version-idの値です。 宛先バケットのバージョン管理が有効または一時停止されていない場合、OSSは宛先オブジェクトのIDがnullのバージョンを生成し、IDがnullの既存のバージョンを上書きします。

制限事項

  • CopyObject操作を呼び出すと、オブジェクトサイズの次の制限が適用されます。

    • ソースバケットが宛先バケットでもあり、ストレージクラス変換がCopyObject操作に含まれていない場合、コピーするオブジェクトは5 GBを超えることがあります。

    • ソースバケットが宛先バケットでもあり、ストレージクラス変換がCopyObject操作に含まれる場合、コピーするオブジェクトは5 GBを超えることはできません。 5 GBを超えるオブジェクトをコピーするには、UploadPartCopy操作を呼び出します。

    • 同じリージョン内のバケット間でオブジェクトをコピーする場合、オブジェクトが1 GB未満の場合はCopyObject操作を呼び出すことを推奨します。 サイズが1 GBを超えるオブジェクトをコピーするには、UploadPartCopy操作を呼び出します。

  • 読み取り権限が必要です。

    CopyObjectまたはUploadPartCopy操作を呼び出すには、コピーするオブジェクトに対する読み取り権限が必要です。

  • CopyObject操作を呼び出して、バージョン化されていないバケット内のオブジェクトをコピーする場合、次の制限が適用されます。

    ソースオブジェクトと宛先オブジェクトは同じです。

    • コピー操作にソースオブジェクトの暗号化メソッドまたはストレージクラスの変更が含まれない場合、OSSはソースオブジェクトのメタデータのみを変更し、オブジェクトのコンテンツはコピーしません。

    • コピー操作にソースオブジェクトの暗号化メソッドまたはストレージクラスの変更が含まれる場合、OSSはソースオブジェクトのメタデータを変更し、オブジェクトのコンテンツをコピーします。

  • CopyObject操作を呼び出してバージョン管理されたバケット内のオブジェクトをコピーする場合、次の制限が適用されます。

    • CopyObject操作を呼び出して追加可能なオブジェクトをコピーすることはできません。

    • CopyObject操作を呼び出して、追加可能オブジェクトのサーバー側暗号化メソッドを変更することはできません。

  • CopyObject操作を呼び出してシンボリックリンクをコピーする場合、次の制限が適用されます。

    シンボリックリンクのみがコピーされます。 シンボリックリンクが指すオブジェクトはコピーされません。

  • 階層的な名前空間機能が有効になっているバケット内のオブジェクトをコピーするCopyObject操作を呼び出す場合、次の制限が適用されます。

    バケット内のディレクトリはコピーできません。

課金

  • CopyObject操作を呼び出すたびに、宛先バケットへのPUTリクエストに対して課金されます。

  • CopyObject操作を呼び出すと、宛先バケットのストレージ使用量が増加します。

  • CopyObject操作でオブジェクトが上書きされ、オブジェクトのストレージクラスが変更された場合にも課金されます。 たとえば、CopyObject操作を呼び出して、IAオブジェクトの作成後10日以内にIAオブジェクトを上書きして低頻度アクセス (IA) オブジェクトを標準オブジェクトに変換すると、30日間の最小保存期間全体に対して課金されます。 ストレージ料金の詳細については、「ストレージ料金」をご参照ください。

リクエスト構文

PUT /DestObjectName HTTP/1.1
ホスト: DestBucketName.oss-cn-hangzhou.aliyuncs.com
日付: GMT日付
権限付与: SignatureValue
x-oss-copy-source: /SourceBucketName/SourceObjectName 

リクエストヘッダー

CopyObjectリクエストのすべてのヘッダーはx-oss- で始まります。 これらのヘッダーは署名文字列に追加する必要があります。 次の表に、ヘッダーを示します。

ヘッダー

データ型

必須

説明

x-oss-forbid-overwrite

String

任意

true

CopyObject操作で同じ名前のオブジェクトを上書きするかどうかを指定します。 宛先バケットのバージョン管理が有効または一時停止されている場合、x-oss-forbid-overwriteリクエストヘッダーは有効になりません。 この場合、CopyObject操作は、宛先オブジェクトと同じ名前を持つ既存のオブジェクトを上書きします。

  • x-oss-forbid-overwriteヘッダーが指定されていないか、falseに設定されている場合、コピーするオブジェクトと同じ名前の既存のオブジェクトが上書きされます。

  • x-oss-forbid-overwriteヘッダーがtrueに設定されている場合、コピーするオブジェクトと同じ名前の既存のオブジェクトは上書きできません。

x-oss-forbid-overwriteヘッダーを指定すると、OSSの1秒あたりのクエリ (QPS) パフォーマンスが低下する可能性があります。 多数のリクエスト (QPSが1,000を超える) にx-oss-forbid-overwriteヘッダーを指定する場合は、テクニカルサポートにお問い合わせください。

デフォルト値:false

x-oss-copy-source

String

必須

/oss-example/oss.jpg

ソースオブジェクトのパス。

デフォルトでは、このヘッダーは空のままです。

x-oss-copy-source-if-match

String

任意

5B3C1A2E053D763E1B002CC607C5 ****

オブジェクトのコピー条件。 ソースオブジェクトのETag値がリクエストで指定されたETag値と同じ場合、OSSはオブジェクトをコピーしてOK 200を返します。

デフォルトでは、このヘッダーは空のままです。

x-oss-copy-source-if-none-match

String

任意

5B3C1A2E053D763E1B002CC607C5 ****

オブジェクトのコピー条件。 ソースオブジェクトのETag値がリクエストで指定されたETag値と異なる場合、OSSはオブジェクトをコピーしてOK 200を返します。

デフォルトでは、このヘッダーは空のままです。

x-oss-copy-source-if-unmodified-since

String

任意

5月11日月曜日2020 08:16:23 GMT

オブジェクトのコピー条件。 リクエストで指定された時間がオブジェクトの変更時間と同じかそれ以降の場合、OSSはオブジェクトをコピーしてOK 200を返します。

デフォルトでは、このヘッダーは空のままです。

x-oss-copy-source-if-modified-since

String

任意

5月11日月曜日2020 08:16:23 GMT

オブジェクトのコピー条件。 リクエストで指定された時間がオブジェクトの変更時間より前の場合、OSSはオブジェクトをコピーしてOK 200を返します。

デフォルトでは、このヘッダーは空のままです。

x-oss-metadata-directive

String

任意

COPY

ターゲットオブジェクトのメタデータを構成するために使用されるメソッド。

  • COPY (デフォルト): ソースオブジェクトのメタデータがターゲットオブジェクトにコピーされます。

    ソースオブジェクトのx-oss-server-side-encryptionヘッダーの設定は、ターゲットオブジェクトにコピーされません。 CopyObjectリクエストのx-oss-server-side-encryptionヘッダーは、宛先オブジェクトの暗号化に使用されるメソッドを指定します。

  • REPLACE: リクエストで指定されたメタデータは、宛先オブジェクトのメタデータとして使用されます。

重要

ソースオブジェクトのパスと宛先オブジェクトのパスが同じで、ソースオブジェクトと宛先オブジェクトが格納されているバケットのバージョン管理が有効になっていない場合、x-oss-metadata-directiveヘッダーの値に関係なく、CopyObjectリクエストで指定されたメタデータが宛先オブジェクトのメタデータとして使用されます。

x-oss-server-side-encryption

String

任意

AES256

オブジェクトの作成時にOSSがオブジェクトの暗号化に使用する、エントロピー符号化ベースの暗号化アルゴリズム。

有効な値: AES256およびKMS

KMS暗号化アルゴリズムを使用する前に、OSSコンソールでKey Management Service (KMS) を有効化する必要があります。 それ以外の場合、KmsServiceNotEnabledが返されます。

  • CopyObjectリクエストでx-oss-server-side-encryptionヘッダーが指定されていない場合、ソースオブジェクトがサーバーで暗号化されているかどうかに関係なく、ターゲットオブジェクトはサーバーで暗号化されません。

  • CopyObjectリクエストでx-oss-server-side-encryptionヘッダーが指定されている場合、ソースオブジェクトがサーバーで暗号化されているかどうかに関係なく、CopyObject操作が実行された後、ターゲットオブジェクトはサーバーで暗号化されます。 さらに、CopyObject要求に対する応答には、x-oss-server-side-encryptionヘッダーが含まれ、その値は宛先オブジェクトの暗号化アルゴリズムです。

    宛先オブジェクトがダウンロードされると、x-oss-server-side-encryptionヘッダーがレスポンスに含まれます。 ヘッダーの値は、宛先オブジェクトの暗号化アルゴリズムです。

x-oss-server-side-encryption-key-id

String

任意

9468da86-3509-4f8d-a61e-6eab1eac ****

KMSによって管理されるCMKのID。

このパラメーターは、x-oss-server-side-encryptionがKMSに設定されている場合にのみ有効です。

x-oss-object-acl

String

任意

非公開

オブジェクトの作成時に宛先オブジェクトに指定されるアクセス制御リスト (ACL) 。

有効な値:

  • default (デフォルト): オブジェクトのACLは、オブジェクトが格納されているバケットのACLと同じです。

  • private: オブジェクトのACLがprivateです。 このオブジェクトを読み書きできるのは、オブジェクトの所有者と許可されたユーザーだけです。

  • public-read: オブジェクトのACLはpublic-readです。 このオブジェクトを読み書きできるのは、オブジェクトの所有者と許可されたユーザーだけです。 他のユーザーはオブジェクトを読むことしかできません。 オブジェクトACLをこの値に設定する場合は注意してください。

  • public-read-write: オブジェクトのACLはpublic-read-writeです。 すべてのユーザーがこのオブジェクトを読み書きできます。 オブジェクトACLをこの値に設定する場合は注意してください。

ACLの詳細については、「オブジェクトACL」をご参照ください。

x-oss-storage-class

String

任意

標準

アップロードするオブジェクトのストレージクラス。

オブジェクトのアップロード時にストレージクラスを指定した場合、指定されたストレージクラスは、オブジェクトのアップロード先のバケットのストレージクラスに関係なく適用されます。 たとえば、オブジェクトをIAバケットにアップロードするときにx-oss-storage-classをStandardに設定した場合、アップロードされたオブジェクトのストレージクラスはStandardになります。

有効な値:

  • 標準 (デフォルト)

  • IA

  • アーカイブ

  • ColdArchive

  • DeepColdArchive

    重要

    大量のオブジェクトをコピーし、宛先オブジェクトのストレージクラスをDeep Cold Archiveに指定すると、PUTリクエスト料金が高くなります。 ライフサイクルルールを設定して、オブジェクトのストレージクラスをDeep Cold Archiveに変換することを推奨します。 これにより、PUTリクエスト料金を削減できます。 ライフサイクルルールの詳細については、「最終変更時刻に基づくライフサイクルルール」をご参照ください。

ストレージクラスの詳細については、「概要」をご参照ください。

x-oss-tagging

String

任意

a:1

宛先オブジェクトのタグ。 宛先オブジェクトに複数のタグを設定できます。 例: TagA=A&TagB=B。

説明

タグキーと値はURLエンコードされている必要があります。 キーと値のペアに等号 (=) が含まれていない場合、タグ値は空の文字列と見なされます。

x-oss-tagging-directive

String

任意

コピー

ターゲットオブジェクトのタグを構成するために使用されるメソッド。 有効な値:

  • コピー (デフォルト): ソースオブジェクトのタグがコピー先オブジェクトにコピーされます。

  • 置換: リクエストで指定されたタグは、宛先オブジェクトに対して設定されます。

CopyObjectリクエストに含まれる一般的なリクエストヘッダー (ホストや日付など) の詳細については、「一般的なリクエストヘッダー」をご参照ください。

レスポンスヘッダー

CopyObject要求に対する応答は、共通の応答ヘッダのみを含む。 詳細については、「共通HTTPヘッダー」をご参照ください。

レスポンス要素

要素

データ型

説明

CopyObjectResult

Container

N/A

CopyObject操作の結果。

ETag

String

5B3C1A2E053D763E1B002CC607C5 ****

宛先オブジェクトのETag値。

親ノード: CopyObjectResult

LastModified

String

2月24日金曜日2012 07:18:48 GMT

ターゲットオブジェクトが最後に変更された時刻。

親ノード: CopyObjectResult

  • バージョン化されていないバケット内のオブジェクトのコピー

    リクエストの例

    PUT /test%2FAK.txt HTTP/1.1
    ホスト: tesx.oss-cn-zhangjiakou.aliyuncs.com
    Accept-Encoding: ID
    ユーザーエージェント: aliyun-sdk-python/2.6.0(Windows/7/AMD64;3.7.0)
    受け入れる: text/html
    接続: キープアライブ
    x-oss-copy-source: /test/AK.txt
    日付: 12月28日金曜日2018 09:41:55 GMT
    承認: OSS qn6qrrqxo2oawuk53otfjbyc:gmnwPKuu20LQEjd + iPkL259A ****
    コンテンツ長: 0 

    レスポンスの例

    x-oss-hash-crc64ecmaは、オブジェクトの64ビットCRC値を示します。 この値は、ECMA-182基準に基づいて計算されます。 CopyObject操作によって生成されたオブジェクトは、この値を持たない可能性があります。

    HTTP/1.1 200 OK
    サーバー: AliyunOSS
    日付: 12月28日金曜日2018: 09:41:56 GMT
    Content-Type: application/xml
    コンテンツ-長さ: 184
    接続: キープアライブ
    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-例HTTP/1.1
    ホスト: versioning-copy.oss-cn-hangzhou.aliyuncs.com
    日付: 4月2019日火曜日03:45:32 GMT
    権限付与: OSS qeyxjc9arppwa0t:QqwOjq7U7j04NVpPqdfcVk0I ****
    x-oss-copy-source: /versioning-copy-source/source-object 

    レスポンスの例

    応答のx-oss-copy-source-version-idは、ソースオブジェクトのバージョン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
    コンテンツ-長さ: 184
    接続: キープアライブ
    日付: 4月2019日火曜日03:45:32 GMT
    サーバー: 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-例HTTP/1.1
    ホスト: versioning-copy.oss-cn-hangzhou.aliyuncs.com
    日付: 4月2019日火曜日03:45:32 GMT
    権限付与: OSS qeyxjc9arppwa0t:5qG4DLaHjxDPtpLlf2e8fBfX ****
    x-oss-copy-source: /versioning-copy-source/source-object?versionId=CAEQNRiBgICv8uaA0BYiIDliZDc3MTc1NjE5MjRkMDI4ZGU4MTZkYjY1ZDgy **** 

    レスポンスの例

    応答のx-oss-copy-source-version-idは、ソースオブジェクトのバージョンIDを示します。 この例では、ソースオブジェクトのバージョンIDは、x-oss-copy-sourceのversionIdで指定します。 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
    コンテンツ-長さ: 184
    接続: キープアライブ
    日付: 4月2019日火曜日03:45:32 GMT
    サーバー: AliyunOSS
    <?xml version="1.0" encoding="UTF-8"?>
    <CopyObjectResult>
      <ETag>"C4CA4238A0B923820DCC509A6F75****"</ETag>
      <LastModified>2019-04-09T03:45:32.000Z</LastModified>
    </CopyObjectResult> 

SDK

次のプログラミング言語のOSS SDKを使用して、CopyObject操作を呼び出すことができます。

エラーコード

エラーコード

HTTPステータスコード

説明

InvalidArgument

400

x-oss-storage-classなどのパラメーターの値が無効です。

Precondition Failed

412

  • x-oss-copy-source-if-matchヘッダーがリクエストに指定されていますが、ソースオブジェクトのETag値はリクエストのETag値とは異なります。

  • リクエストにはx-oss-copy-source-if-unmodified-sinceヘッダーが指定されていますが、リクエストに指定された時刻はオブジェクトの最後に変更された時刻より前です。

Not Modified

304

  • x-oss-copy-source-if-none-matchヘッダーがリクエストに指定されていますが、ソースオブジェクトのETag値はリクエストのETag値と同じです。

  • リクエストにx-oss-copy-source-if-modified-sinceヘッダーが指定されていますが、リクエストに指定された時間以降、ソースオブジェクトは変更されていません。

KmsServiceNotEnabled

403

x-oss-server-side-encryptionヘッダーはKMSに設定されていますが、KMSは事前に有効化されていません。

FileAlreadyExists

409

  • リクエストにはx-oss-forbid-overwrite=trueヘッダーが含まれ、バケットにはリクエストで指定されたオブジェクトと同じ名前のオブジェクトが含まれます。

  • ソースオブジェクトまたは宛先オブジェクトは、階層的な名前空間機能が有効になっているバケット内のディレクトリです。

FileImmutable

409

削除または変更するデータは、保持ポリシーによって保護されます。

よくある質問

CopyObject操作を呼び出して、一度に複数のオブジェクトをコピーできますか?

いいえ、できません。 CopyObjectは、一度に1つのオブジェクトをコピーするために使用されます。 一度に複数のオブジェクトをコピーする場合は、ossutilを使用できます。 詳細については、「オブジェクトのコピー」をご参照ください。