すべてのデータパートをアップロードしたら、Complete Multipart Upload API を呼び出して、ファイル全体のマルチパートアップロードを完了する必要があります。
この操作では、すべての有効なデータパートのリスト (パート番号と ETag を含む) を提供する必要があります。送信したパートリストを OSS が受信すると、各データパートの有効性が個別に検証されます。すべてのデータパートが検証されると、OSS はこれらのパートを 1 つの完全なオブジェクトに結合します。
リクエスト構文
POST /ObjectName?uploadId=UploadId HTTP/1.1
Host: BucketName.oss-cn-hangzhou.aliyuncs.com
Date: GMT Date
Content-Length: Size
Authorization: Signature
<CompleteMultipartUpload>
<Part>
<PartNumber>PartNumber</PartNumber>
<ETag>ETag</ETag>
</Part>
...
</CompleteMultipartUpload>
リクエスト パラメーター
マルチパートアップロードモードを初期化するとき、encoding-typeパラメーターを利用して返されるエンコードキーを指定可能です。
名前 | 型 | 説明 |
---|---|---|
encoding-type | String | キーのエンコーディングの形を指定しすることが可能です。現在、URLエンコードがサポートされています。キーは、UTF-8エンコーディングを採用しているが、XML 1.0標準は0から10までのASCII値で、文字などの特定の制御文字を、一部の構文解析の文字をサポートしていません。キーは、XML 1.0標準でサポートされていない制御文字が含まれている場合には、encoding-の型の指定することが可能で、指定された型でキーをエンコードします。 デフォルト:なし オプションの値:url |
リクエストの要素
名前 | 型 | 説明 |
---|---|---|
CompleteMultipartUpload | Container | Complete Multipart Upload リクエストのコンテンツの格納に使用されるコンテナー。 サブノード: 1 つ以上の Part 要素 親ノード: なし |
ETag | String | データパートが正常にアップロードされると OSS から返される ETag 値。 親ノード: Part |
Part | Container | アップロードされたデータパートの格納に使用されるコンテナー。 サブノード: ETag、PartNumber 親ノード: InitiateMultipartUploadResult |
PartNumber | Integer | パート番号。 親ノード: Part |
応答の要素
名前 | 型 | 説明 |
---|---|---|
Bucket | String | バケット名を指定します。 親ノード: CompleteMultipartUploadResult |
CompleteMultipartUploadResult | Container | Complete Multipart Upload リクエストの結果の格納に使用されるコンテナー。 サブノード: Bucket、Key、ETag、Location 親ノード: なし |
ETag | String | ETag (エンティティタグ) は、オブジェクトの生成時に作成され、オブジェクトのコンテンツを示すために使用されます。オブジェクトは、Complete Multipart Upload リクエストに基づいて作成されます。ETag の値は、オブジェクトのコンテンツの UUID です。この ETag の値を使用して、オブジェクトのコンテンツが変更されているかどうかを確認できます。 親ノード: CompleteMultipartUploadResult |
Location | String | 新たに作成されたオブジェクトの URL を指定します。 親ノード: CompleteMultipartUploadResult |
Key | String | 新たに作成されたオブジェクトの名前。 親ノード: CompleteMultipartUploadResult |
EncodingType | String | 返す結果にエンコードタイプを指定します。リクエストの中、エンコードタイプが指定された場合、エンコードされたキーが返されます。 親ノード: Container |
詳細分析
- OSS は、Complete Multipart Upload リクエストを受信すると、最後のパートを除くすべてのパートが 100 KB より大きいことを確認し、ユーザーから送信されたパートリストの各パート番号と ETag を調べます。したがって、データパートをアップロードする際には、パート番号だけでなく、パートが正常にアップロードされるたびに OSS から返される ETag 値も記録する必要があります。
- OSS の Complete Multipart Upload リクエストの処理には数分かかります。その間にクライアントが OSS から切断されても、リクエストの処理は続行されます。
- 送信するパートリストのパート番号は、連続していなくてもかまいません (1 つ目のパート番号が 1 で、2 つ目のパート番号が 5 など)。
- Complete Multipart Upload リクエストが正常に処理されると、対応するアップロード ID が無効になります。
- 同じオブジェクトが複数の異なるアップロード ID を持つ場合もあります。いずれかのアップロード ID が完了しても、そのオブジェクトの他のアップロード ID には影響しません。
- Initiate Multipart Upload インターフェイスを呼び出したときに x-oss-server-side-encryption リクエストヘッダーを指定した場合、OSS は Complete Multipart Upload 応答ヘッダーで x-oss-server-side-encryption ヘッダーを返します。
- x-oss-server-side-encryption の値は、このオブジェクトに使用するサーバー側の暗号化アルゴリズムを示します。
例
リクエストの例:
POST /multipart.data? uploadId=0004B9B2D2F7815C432C9057C03134D4 HTTP/1.1
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
Content-Length: 1056
Date: Fri, 24 Feb 2012 10:19:18 GMT
Authorization: OSS qn6qrrqxo2oawuk53otfjbyc:8VwFhFUWmVecK6jQlHlXMK/zMT0=
<CompleteMultipartUpload>
<Part>
<PartNumber>1</PartNumber>
<ETag>"3349DC700140D7F86A078484278075A9"</ETag>
</Part>
<Part>
<PartNumber>5</PartNumber>
<ETag>"8EFDA8BE206636A695359836FE0A0E0A"</ETag>
</Part>
<Part>
<PartNumber>8</PartNumber>
<ETag>"8C315065167132444177411FDA149B92"</ETag>
</Part>
</CompleteMultipartUpload>
レスポンスの例:
HTTP/1.1 200 OK
Server: AliyunOSS
Content-Length: 329
Content-Type: Application/xml
Connection: keep-alive
x-oss-request-id: 594f0751-3b1e-168f-4501-4ac71d217d6e
Date: Fri, 24 Feb 2012 10:19:18 GMT
<?xml version="1.0" encoding="UTF-8"?>
<CompleteMultipartUploadResult xmlns="http://doc.oss-cn-hangzhou.aliyuncs.com">
<Location>http://oss-example.oss-cn-hangzhou.aliyuncs.com /multipart.data</Location>
<Bucket>oss-example</Bucket>
<Key>multipart.data</Key>
<ETag>B864DB6A936D376F9F8D3ED3BBE540DD-3</ETag>
</CompleteMultipartUploadResult>