バケット内または同じリージョン内のバケット間でオブジェクトをコピーします。
バージョン管理
既定では、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を超えることはできません。
ストレージクラス変換がCopyObject操作に含まれる場合、コピーするオブジェクトは5 GBを超えることはできません。 コピーするオブジェクトが1 GBを超える場合は、UploadPartCopy操作を呼び出す必要があります。
読み取り権限が必要です。
CopyObjectまたはUploadPartCopy操作を呼び出すには、コピーするオブジェクトに対する読み取り権限が必要です。
CopyObject操作を呼び出して、バージョン化されていないバケット内のオブジェクトをコピーする場合、次の制限が適用されます。
コピー操作でソースオブジェクトの暗号化メソッドまたはストレージクラスが変更されない場合、OSSはソースオブジェクトのメタデータのみを変更し、オブジェクトのコンテンツはコピーしません。
コピー操作でソースオブジェクトの暗号化メソッドまたはストレージクラスが変更された場合、OSSはソースオブジェクトのメタデータを変更し、オブジェクトのコンテンツをコピーします。
CopyObject操作を呼び出してシンボリックリンクをコピーする場合、次の制限が適用されます。
シンボリックリンクのみがコピーされます。 シンボリックリンクが指すオブジェクトはコピーされません。
階層的な名前空間機能が有効になっているバケット内のオブジェクトをコピーするCopyObject操作を呼び出す場合、次の制限が適用されます。
バケット内のディレクトリはコピーできません。
計測と課金ルール
CopyObject操作を呼び出すたびに、宛先バケットへのPUTリクエストに対して課金されます。
CopyObject操作を呼び出すと、宛先バケットのストレージ使用量が増加します。
CopyObject操作がオブジェクトを上書きしてオブジェクトのストレージクラスを変更する場合にも課金されます。 たとえば、IAオブジェクトが作成されてから10日以内にIAオブジェクトを上書きして低頻度アクセス (IA) オブジェクトを標準オブジェクトに変換するCopyObject操作を呼び出した場合、最小保存期間である10日以内に保存されたIAオブジェクトのストレージ使用量に対して課金されます。 ストレージ料金の詳細については、「ストレージ料金」をご参照ください。
リクエストの構造
PUT /DestObjectName HTTP/1.1
Host: DestBucketName.oss-cn-hangzhou.aliyuncs.com
Date: GMT Date
Authorization: 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ヘッダーを指定すると、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 | ターゲットオブジェクトのメタデータを構成するために使用されるメソッド。
重要 ソースオブジェクトのパスと宛先オブジェクトのパスが同じで、ソースオブジェクトと宛先オブジェクトが格納されているバケットのバージョン管理が有効になっていない場合、x-oss-metadata-directiveヘッダーの値に関係なく、CopyObjectリクエストで指定されたメタデータが宛先オブジェクトのメタデータとして使用されます。 |
x-oss-server-side-encryption | String | 任意 | AES256 | オブジェクトの作成時にOSSがオブジェクトの暗号化に使用する、エントロピー符号化ベースの暗号化アルゴリズム。 有効な値: AES256およびKMS。 KMS暗号化アルゴリズムを使用する前に、OSSコンソールでKey Management Service (KMS) を有効化する必要があります。 そうしないと、エラーコード KmsServiceNotEnabled が返されます。
|
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) 。 有効な値:
詳細については、「オブジェクトACL」をご参照ください。 |
x-oss-storage-class | String | 任意 | 標準 | オブジェクトのストレージクラス。 オブジェクトをアップロードするときにストレージクラスを指定すると、オブジェクトがアップロードされるバケットのストレージクラスに関係なく、指定されたストレージクラスが使用されます。 たとえば、オブジェクトをIAバケットにアップロードするときにx-oss-storage-classをStandardに設定した場合、アップロードされたオブジェクトのストレージクラスはStandardになります。 有効な値:
ストレージクラスの詳細については、「概要」をご参照ください。 |
x-oss-tagging | String | 任意 | a:1 | 宛先オブジェクトのタグ。 宛先オブジェクトに複数のタグを設定できます。 例: TagA=A&TagB=B。 説明 タグキーと値はURLエンコードされている必要があります。 キーと値のペアに等号 (=) が含まれていない場合、タグ値は空の文字列と見なされます。 |
x-oss-tagging-directive | String | 任意 | コピー | ターゲットオブジェクトのタグを構成するために使用されるメソッド。 有効な値:
|
CopyObjectリクエストに含まれる一般的なリクエストヘッダー (ホストや日付など) の詳細については、「一般的なリクエストヘッダー」をご参照ください。
レスポンスヘッダー
CopyObject要求に対する応答は、共通の応答ヘッダのみを含む。 詳細については、「共通レスポンスヘッダー」をご参照ください。
レスポンス要素
要素 | データ型 | 例 | 説明 |
CopyObjectResult | Container | 非該当 | CopyObject操作の結果が格納されるコンテナ。 デフォルトでは、このヘッダーは空のままです。 |
ETag | String | 5B3C1A2E053D763E1B002CC607C5 **** | 宛先オブジェクトのETag値。 親ノード: CopyObjectResult |
LastModified | String | 2月24日金曜日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: OSS qn6qrrqxo2oawuk53otfjbyc:gmnwPKuu20LQEjd+iPkL259A**** Content-Length: 0
通常のレスポンス例
x-oss-hash-crc64ecma
は、オブジェクトの64ビットCRC値を示します。 この値は、ECMA-182基準に基づいて計算されます。 CopyObject操作によって生成されたオブジェクトは、この値を持たない可能性があります。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: OSS qn6q**************:77Dv**************** 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 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: OSS qn6q**************:77Dv**************** 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 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
次のプログラミング言語のOSS SDKを使用して、CopyObject操作を呼び出すことができます。
エラーコード
エラーコード | 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操作を呼び出して、一度に複数のオブジェクトをコピーすることはできません。 CopyObject操作は、一度に1つのオブジェクトをコピーするために使用される。 一度に複数のオブジェクトをコピーする場合は、ossutilを使用できます。 詳細については、「オブジェクトのコピー」をご参照ください。