UploadPartCopy は、既存のオブジェクトのパーツを 1 つのみコピーしてアップロードする場合に使用します。

UploadPartCopy インターフェイスを呼び出すには、UploadPart リクエストヘッダに x-oss-copy-source を含めます。1 GB 以上のオブジェクトをコピーする場合は、必ず UploadPartCopy を使用します。コピー元バケットとコピー先バケットは同じリージョン内である必要があります。1 GB 以下のオブジェクトをひとつの操作でコピーするには、CopyObject を使用します。

リクエスト構文

  1. PUT /ObjectName? partNumber=PartNumber&uploadId=UploadId HTTP/1.1Host: BucketName.oss-cn-hangzhou.aliyuncs.comDate: GMT DateContent-Length: SizeAuthorization: SignatureValuex-oss-copy-source: /SourceBucketName/SourceObjectNamex-oss-copy-source-range:bytes=first-last

リクエストヘッダー

共通のリクエストヘッダーの他、UploadPartCopy リクエストには、下表のパラメータがあります。下表のパラメータで、コピーするオブジェクトのアドレスとコピー範囲を指定します。

名前 説明
x-oss-copy-source String コピー元のアドレス (読み取り権限が必要)

初期値:なし

x-oss-copy-source-range Integer コピー元オブジェクトのコピー範囲。「bytes=0-9」と指定すると、0 バイト目から 9 バイト目がコピーされます。本リクエストヘッダーはオブジェクト全体をコピーする場合には不要です。

初期値:なし

下表のリクエストヘッダは、x-oss-copy-source に指定されたオブジェクトに対する条件です。

名前 説明
x-oss-copy-source-if-match String コピー元オブジェクトの ETAG 値と指定された ETAG が同じ場合、正常にコピーされます。それ以外の場合は、HTTP エラーコード 412 が返されます (処理前の失敗)。

初期値:なし

x-oss-copy-source-if-none-match String コピー元オブジェクトの ETag 値が指定された ETag と異なる場合、正常にコピーされ、200 OK が返されます。それ以外の場合は、304 Not Modified が返されます。

初期値:なし

x-oss-copy-source-if-unmodified-since String 指定された時刻以降にコピー元のオブジェクトが変更されている場合、正常にコピーされ、200 OK が返されます。それ以外の場合は、412 precondition failed が返されます。

初期値:なし

x-oss-copy-source-if-modified-since String 指定された時刻以前にコピー元のオブジェクトが変更されている場合、正常にコピーされ、200 OK が返されます。それ以外の場合は、304 not modified が返されます。

初期値:なし

時刻の書式:GMT 時間 (例:「Fri, 13 Nov 2015 14:47:53 GMT」)

詳細分析

  • InitiateMultipartUpload インターフェイスを呼び出してデータのパーツをアップロードする前に、このインターフェイスを呼び出して、OSS サーバーによって発行されるアップロード ID を取得する必要があります。
  • マルチパートアップロードモードでは、最後のパーツ以外のパーツはすべて 100 KB を超えている必要があります。ただし、UploadPart インターフェイスでは、アップロードされたパーツのサイズがその場で確認されるわけではありません (そのパーツが最後のパーツかどうかがわからないため)。アップロードされたパーツのサイズは、マルチパートアップロードが完了して初めて確認されます。
  • x-oss-copy-source-range リクエストヘッダーを指定しない場合、ソースオブジェクト全体がコピーされます。このリクエストヘッダーを指定すると、応答メッセージにファイル全体の長さとコピー範囲が示されます。たとえば、「Content-Range: bytes 0-9/44」は、ファイル全体の長さが 44 で、コピーする範囲は 0 ~ 9 であることを示しています。指定した範囲が範囲ルールに従っていない場合は、ファイル全体がコピーされ、結果に Content-Range は含まれません。
  • InitiateMultipartUpload インターフェイスを呼び出すときに x-oss-server-side-encryption リクエストヘッダーを指定した場合、OSS はアップロードされたパーツを暗号化し、UploadPart 応答ヘッダーで x-oss-server-side-encryption ヘッダーを返します。x-oss-server-side-encryption の値は、このパーツに採用するサーバー側の暗号化アルゴリズムを示します。詳細については、「InitiateMultipartUpload」インターフェイスをご参照ください。
  • 本操作は、追加アップロードで作成されたオブジェクト (追加オブジェクト) のコピーには使用できません。
  • バケットがアーカイブタイプの場合は、本インターフェイスを呼び出すことはできません。アーカイブバケットを指定して呼び出すと、エラーコード 400 OperationNotSupported が返されます。

リクエスト例

  1. PUT /multipart.data?partNumber=1&uploadId=0004B9895DBBB6EC98E36 HTTP/1.1Host: oss-example.oss-cn-hangzhou.aliyuncs.comContent-Length6291456Date: Wed, 22 Feb 2012 08:32:21 GMTAuthorization: OSS qn6qrrqxo2oawuk53otfjbyc:J/lICfXEvPmmSW86bBAfMmUmWjI=x-oss-copy-source: /oss-example/ src-objectx-oss-copy-source-range:bytes=100-6291756

レスポンス例

  1. HTTP/1.1 200 OKServer: AliyunOSSConnection: keep-alivex-oss-request-id: 3e6aba62-1eae-d246-6118-8ff42cd0c21aDate: Thu, 17 Jul 2014 06:27:54 GMT’<?xml version=”1.0 encoding=”UTF-8”?><CopyPartResult xmlns=”http://doc.oss-cn-hangzhou.aliyuncs.com”> <LastModified>2014-07-17T06:27:54.000Z </LastModified> <ETag>”5B3C1A2E053D763E1B002CC607C5A0FE”</ETag></CopyPartResult>