开发者社区 问答 正文

关于MultipartUpload的操作之UploadPart?

初始化一个Multipart Upload之后,可以根据指定的Object名和Upload ID来分块(Part)上传数据。每一个上传的Part都有一个标识它的号码(part number,范围是1~10,000)。对于同一个Upload ID,该号码不但唯一标识这一块数据,也标识了这块数据在整个文件内的相对位置。如果你用同一个part号码,上传了新的数据,那么OSS上已有的这个号码的Part数据将被覆盖。除了最后一块Part以外,其他的part最小为100KB;最后一块Part没有大小限制。

请求语法PUT /ObjectName?partNumber=PartNumber&uploadId=UploadId HTTP/1.1
Host: BucketName.oss-cn-hangzhou.aliyuncs.com
Date: GMT Date
Content-Length: Size
Authorization: SignatureValue





细节分析

  1. 调用该接口上传Part数据前,必须调用Initiate Multipart Upload接口,获取一个OSS服务器颁发的Upload ID。
  2. Multipart Upload要求除最后一个Part以外,其他的Part大小都要大于100KB。但是Upload Part接口并不会立即校验上传Part的大小(因为不知道是否为最后一块);只有当Complete Multipart Upload的时候才会校验。
  3. OSS会将服务器端收到Part数据的MD5值放在ETag头内返回给用户。
  4. Part号码的范围是1~10000。如果超出这个范围,OSS将返回InvalidArgument的错误码。
  5. 若调用Initiate Multipart Upload接口时,指定了x-oss-server-side-encryption请求头,则会对上传的Part进行加密编码,并在Upload Part响应头中返回x-oss-server-side-encryption头,其值表明该Part的服务器端加密算法,具体见Initiate Multipart Upload接口。6.为了保证数据在网络传输过程中不出现错误,用户发送请求时携带Content-MD5,OSS会计算上传数据的MD5与用户上传的MD5值比较,如果不一致返回InvalidDigest错误码。


示例


[backcolor=transparent]请求示例: PUT /multipart.data?partNumber=1&uploadId=0004B9895DBBB6EC98E36  HTTP/1.1
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
Content-Length:6291456
Date: Wed, 22 Feb 2012 08:32:21 GMT
Authorization: OSS qn6qrrqxo2oawuk53otfj byc:J/lICfXEvPmmSW86bBAfMmUmWjI=
[6291456 bytes data]


[backcolor=transparent]返回示例: HTTP/1.1 200 OK
Server: AliyunOSS
Connection: keep-alive
ETag: 7265F4D211B56873A381D321F586E4A9
x-oss-request-id: 3e6aba62-1eae-d246-6118-8ff42cd0c21a
Date: Wed, 22 Feb 2012 08:32:21 GMT

展开
收起
青衫无名 2017-10-23 09:51:25 2233 分享 版权
阿里云 AI 助理回答

在使用阿里云对象存储服务(OSS)进行分片上传(Multipart Upload)时,初始化之后的上传流程涉及以下几个关键步骤和注意事项:

  1. 分块上传(UploadPart)

    • 请求语法:通过PUT方法,构造如下格式的请求URL来上传每个分块。
      PUT /ObjectName?partNumber=PartNumber&uploadId=UploadId
      
    • 在此URL中,ObjectName是您要上传的文件名,partNumber表示当前上传分块的编号(范围为1至10,000),uploadId是在初始化Multipart Upload时从服务器获得的唯一标识符。
  2. 注意事项

    • Part Number唯一性与覆盖规则:每个Part Number对应的数据块在整个文件中具有固定的位置。如果使用相同的Part Number上传新的数据块,这将覆盖OSS上已存在的同号码Part。
    • Part Size限制:除最后一个Part外,所有Part的大小应至少为100KB。最后一个Part没有大小限制,可以小于100KB。
    • Upload ID重要性:务必保存初始化Multipart Upload时返回的uploadId,它是后续操作(如上传分块、完成或取消上传)的必要参数。
    • MD5校验:OSS会返回每个上传Part的MD5值(ETag),用于验证数据传输的完整性。
  3. 权限需求:执行UploadPart操作前,确保拥有oss:PutObject权限。

  4. 错误处理与优化:在实际操作中,注意监控上传过程中的错误代码,如遇到InvalidPartNoSuchUpload等错误需采取相应措施处理。同时,考虑根据网络条件调整并发上传策略以优化上传效率。

综上所述,分块上传至OSS时,正确构造请求、遵循Part Number规则、留意Part大小限制,并妥善管理Upload ID是确保上传成功的关键。同时,具备相应的权限设置及错误处理机制也是不可忽视的环节。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答