問題の説明
UploadPartリクエストのすべてのパーツの合計サイズが、InitiateMultipartUploadリクエストで指定されたデータサイズと等しくありません。
原因
最後のUploadPartリクエストの最後のパーツのサイズが期待値ではありません。
クライアント側の暗号化シナリオのInitiateMultipartUploadリクエストでは、x-oss-meta-client-side-encryption-data-sizeおよびx-oss-meta-client-side-encryption-part-sizeヘッダーが必要です。 最後のリクエストを除く各UploadPartリクエストは、InitiateMultipartUploadリクエストのx-oss-meta-client-side-encryption-part-sizeヘッダーで指定されたパーツサイズと同じサイズのデータをアップロードする必要があります。 最後の部分のサイズは、x-oss-meta-client-side-encryption-data-sizeヘッダーの値からアップロードされた部分のサイズを引いた値です。
例
たとえば、InitiateMultipartUploadリクエストを開始します。
POST /multipart.data? HTTP/1.1のアップロード
ホスト: oss-example.oss-cn-hangzhou.aliyuncs.com
日付: 2月22日水2012 08:32:21 GMT
x-oss-storage-class: アーカイブ
権限付与: OSS qn6qrrqxo2oawuk53otfjbyc:/cluRFtRwMTZpC2hTj4F67AG ****
x-oss-meta-client-side-encryption-data-size: 2048
x-oss-meta-client-side-encryption-part-size: 1024 次に、UploadPartリクエストを開始します。
PUT /multipart.data?partNumber=1&uploadId=0004B9895DBBB6EC9 **** HTTP/1.1
ホスト: oss-example.oss-cn-hangzhou.aliyuncs.com
コンテンツ-長さ: 1024
日付: 2月22日水2012 08:32:21 GMT
権限付与: OSS qn6qrrqxo2oawuk53otf ****:J/lICfXEvPmmSW86bBAfMmUm ****
x-oss-meta-client-side-encryption-part-size: 1024
[1024バイトのデータ] 2番目のUploadPartリクエストを開始します。
PUT /multipart.data?partNumber=2&uploadId=0004B9895DBBB6EC9 **** HTTP/1.1
ホスト: oss-example.oss-cn-hangzhou.aliyuncs.com
コンテンツ-長さ: 100
日付: 2月22日水2012 08:32:21 GMT
権限付与: OSS qn6qrrqxo2oawuk53otf ****:J/lICfXEvPmmSW86bBAfMmUm ****
x-oss-meta-client-side-encryption-part-size: 1024
[100バイトのデータ] 2番目のUploadPartリクエストでは、リクエストのデータサイズが予想サイズと異なるため、エラーが返されます。
ソリューション
最後のパーツのサイズが、InitiateMultipartUploadリクエストで指定されたデータサイズから、アップロードされたすべてのパーツのサイズを引いたサイズであることを確認します。