0042-00000216

问题描述

CompleteMultipartUpload请求中如果指定了x-oss-complete-allyes,则不允许携带请求体。

问题原因

您发起了CompleteMultipartUpload请求来完成分片上传任务,并且在请求中通过将x-oss-complete-all请求头设置为yes来让OSS列举当前UploadId已上传的所有Part,在这种情况下请求就不能再携带请求体XML,如果请求体不为空的话,就会产生该错误。

问题示例

比如您发起了如下请求:

POST /multipart.data?uploadId=0004B9B2D2F7815C432C9057C031****&encoding-type=url 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 qn6q**************:77Dv****************
x-oss-complete-all: yes
<CompleteMultipartUpload> 
    <Part>
    		<PartNumber>1</PartNumber>
        <ETag>"3349DC700140D7F86A0784842780****"</ETag>
    </Part>  
    <Part> 
        <PartNumber>5</PartNumber>  
        <ETag>"8EFDA8BE206636A695359836FE0A****"</ETag> 
    </Part>  
    <Part> 
        <PartNumber>8</PartNumber>  
        <ETag>"8C315065167132444177411FDA14****"</ETag> 
    </Part> 
</CompleteMultipartUpload>

上述请求通过将x-oss-complete-all请求头设为yes,在这种情况下OSS会列举当前UploadId已上传的所有Part,然后按照PartNumber的序号排序并执行CompleteMultipartUpload操作。这种情况下不允许继续指定body,否则报错。

解决方案

如果您希望OSS来列举当前UploadId已上传的所有Part,然后按照PartNumber的序号排序并执行CompleteMultipartUpload操作,可以将x-oss-complete-all请求头设为yes,并确保请求的请求体为空:

POST /multipart.data?uploadId=0004B9B2D2F7815C432C9057C031****&encoding-type=url 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 qn6q**************:77Dv****************
x-oss-complete-all: yes

相关文档