文档中心 > 分片上传
分片上传

最近更新时间:2022-07-25

分片上传步骤

分片上传分为以下三个步骤:

  1. 初始化一个分片上传事件。

  2. 上传分片。


  3. 说明

    • 对于同一个uploadId,分片号(partNumber)标识了该分片在整个文件内的相对位置。如果使用同一个分片号上传了新的数据,那么UOS上这个分片已有的数据将会被覆盖。

    • 对象存储将收到的分片数据的MD5值放在ETag头内返回给用户。

    • 对象存储计算上传数据的MD5值,并与SDK计算的MD5值比较,如果不一致则返回InvalidDigest错误码。



  4. 完成分片上传。


分片上传示例

以下通过一个完整的示例对分片上传的流程进行逐步解析:

from src.ossConfig import ossConfig

import unicloud_oss.Oss as Oss

access_key = 'XXXXXXXXX'
secret_key = 'XXXXXXXXXXXXXXXXXXX'
endpoint_url = 'http://XXXXXXXXXXXXXXXXX.com'
config = ossConfig(access_key,secret_key,endpoint_url)

bucket_name = 'test1'
object_name = 'myMultipartTest'
path = 'D:\\test\\1084.iso'

#初始化分片上传
UploadId = Oss.create_multipart_upload(config,bucket_name,object_name)
print(UploadId)

#获取分片列表
list_parts = Oss.list_parts(config,bucket_name,object_name,UploadId=UploadId)
print(list_parts)

list_multipart_uploads = Oss.list_multipart_uploads(config,bucket_name)
print(list_multipart_uploads)

#取消分片上传(删除已上传的分片碎片)
if Oss.abort_multipart_upload(config,bucket_name,object_name,UploadId=UploadId):
   print("abort success")
else:
   print("abort fail!")

#文件分片    
chunksize = 100*1024*1024
src = open(path,'rb')
chunkNum = 1
parts_info={'Parts':[]}
while True:
   chunk = src.read(chunksize)
   if not chunk:
       break
   #上传分片
   part = Oss.upload_part(config,bucket_name,object_name,chunk,partNumber = chunkNum,UploadId=UploadId)
   part_info = {
       'ETag':part['ETag'],
       'PartNumber':chunkNum,
  }
   print(part_info)
   parts_info['Parts'].append(part_info)
   chunkNum = chunkNum + 1
src.close()

#完成分片上传
if Oss.complete_multipart_upload(config,bucket_name,object_name,parts_info,UploadId=UploadId):
   print("multipart upload success!")
else:
   print("multipart upload fail!")