使用说明
- 将要上传的文件分成多个数据块(US3 里又称之为 Part)来分别上传,上传完成之后再调将这些 Part 组合成一个 Object 来达到断点续传的效果。
- 适用场景
- 大文件(大于1GB)的上传。
- 恶劣的网络环境:如果上传的过程中出现了网络错误,可以从失败的Part进行续传。其他上传方式则需要从文件起始位置上传。
函数说明
uploadfile
uploadfile
(bucket, key, localfile, maxthread=4, retrycount=3, retryinterval=5, header=None)
分片上传本地文件到空间
Parameters
- bucket – string类型,空间名称
- key – string类型,文件在空间中的名称
- localfile – string 类型,本地文件名称
- maxthread – 限制的最大线程数
- retrycount – integer 类型,分片重传次数
- retryinterval – integer 类型,同个分片失败重传间隔,单位秒
- header – dict类型,http 请求header,键值对类型分别为string,比如{'User-Agent': 'Google Chrome'}
Returns
- ret: 如果http状态码为[200, 204, 206]之一则返回None,否则如果服务器返回json信息则返回dict类型,键值对类型分别为string, unicode string类型,否则返回空的dict
- ResponseInfo: 响应的具体信息,UCloud UFile 服务器返回信息或者网络链接异常
resumeuploadfile
resumeuploadfile
(retrycount=3, retryinterval=5, bucket=None, key=None, uploadid=None, blocksize=None, etaglist=None, localfile=None, pausepartnumber=None, mime_type=None, header=None)
断点续传失败的本地文件分片。可以在调用uploadfile失败后重新续传,也可以通过传递所有需要的参数续传。
Parameters
- retrycount – integer 类型,分片重传次数
- retryinterval – integer 类型,同个分片失败重传间隔,单位秒
- bucket – string类型, 空间名称
- key – string类型,文件或数据在空间中的名称
- uploadid – string类型,初始化分片获得的uploadid
- blocksize – integer类型,分片大小
- etaglist – list类型,元素为已经上传成功的分片的etag
- pausepartnumber – integer类型,第一个失败分片的编号(编号从0开始)
- localfile – string类型,本地文件名称
- mime_type – string类型,上传数据的MIME类型
- header – dict类型,http 请求header,键值对类型分别为string,比如{'User-Agent': 'Google Chrome'}
Returns
- ret: 如果http状态码为[200, 204, 206]之一则返回None,否则如果服务器返回json信息则返回dict类型,键值对类型分别为string, unicode string类型,否则返回空的dict
- ResponseInfo: 响应的具体信息,UCloud UFile 服务器返回信息或者网络链接异常
uploadstream
uploadstream
(bucket, key, stream, maxthread=4, retrycount=3, retryinterval=5, mime_type=None, header=None)
断点续传失败数据流的分片。可以在调用uploadstream失败后重新续传,也可以通过传递所有需要的参数续传
Parameters
- bucket – 空间名称
- key – 上传数据在空间中的名称
- stream – file-like 对象或者二进制数据流
- maxthread – 限制的最大线程数
- mime_type – 上传数据的MIME类型
- retrycount – integer 类型,分片重传次数
- retryinterval – integer 类型,同个分片失败重传间隔,单位秒
- header – dict类型,http 请求header,键值对类型分别为string,比如{'User-Agent': 'Google Chrome'}
Returns
- ret: 如果http状态码为[200, 204, 206]之一则返回None,否则如果服务器返回json信息则返回dict类型,键值对类型分别为string, unicode string类型,否则返回空的dict
- ResponseInfo: 响应的具体信息,UCloud UFile 服务器返回信息或者网络链接异常
resumeuploadstream
resumeuploadstream
(retrycount=3, retryinterval=5, bucket=None, key=None, uploadid=None, blocksize=None, etaglist=None, stream=None, pausepartnumber=None, mime_type=None, header=None)
分片上传二进制数据流到UFile空间。
Parameters
- retrycount – integer 类型,分片重传次数
- retryinterval – integer 类型,同个分片失败重传间隔,单位秒
- bucket – string类型, 空间名称
- key – string类型,文件或数据在空间中的名称
- uploadid – string类型,初始化分片获得的uploadid
- blocksize – integer类型,分片大小
- etaglist – list类型,元素为已经上传成功的分片的etag
- pausepartnumber – integer类型,第一个失败分片的编号(编号从0开始)
- stream – file-like对象或者二进制数据流,需要重新上传的数据
- mime_type – string类型,上传数据的MIME类型
- header – dict类型,http 请求header,键值对类型分别为string,比如{'User-Agent': 'Google Chrome'}
Returns
- ret: 如果http状态码为[200, 204, 206]之一则返回None,否则如果服务器返回json信息则返回dict类型,键值对类型分别为string, unicode string类型,否则返回空的dict
- ResponseInfo: 响应的具体信息,UCloud UFile 服务器返回信息或者网络链接异常
代码示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public_key = '' #账户公钥
private_key = '' #账户私钥
bucket = '' #空间名称
sharding_key = '' #上传文件在空间中的名称
local_file = '' #本地文件名
# 设置上传host后缀,外网可用后缀形如 .cn-bj.ufileos.com(cn-bj为北京地区,其他地区具体后缀可见控制台:对象存储-单地域空间管理-存储空间域名)
# 默认值为'.cn-bj.ufileos.com',如果上传文件的bucket所在地域不在北京,请务必设置此项
upload_suffix = 'YOUR_UPLOAD_SUFFIX'
from ufile import multipartuploadufile
multipartuploadufile_handler = multipartuploadufile.MultipartUploadUFile(public_key, private_key, upload_suffix)
# 分片上传一个全新的文件
ret, resp = multipartuploadufile_handler.uploadfile(bucket, sharding_key, local_file)
while True:
if resp.status_code == 200: # 分片上传成功
break
elif resp.status_code == -1: # 网络连接问题,续传
ret, resp = multipartuploadufile_handler.resumeuploadfile()
else: # 服务或者客户端错误
print(resp.error)
break
# 分片上传一个全新的二进制数据流
from io import BytesIO
bio = BytesIO(u'你好'.encode('utf-8'))
ret, resp = multipartuploadufile_handler.uploadstream(bucket, sharding_key, bio)
while True:
if resp.status_code == 200: # 分片上传成功
break
elif resp.status_code == -1: # 网络连接问题,续传
ret, resp = multipartuploadufile_handler.resumeuploadstream()
else: # 服务器或者客户端错误
print(resp.error)
break
- HTTP 返回状态码
状态码 | 描述 |
---|---|
200 | 文件或者数据上传成功 |
400 | 上传到不存在的空间 |
403 | API公私钥错误 |
401 | 上传凭证错误 |