断点续传如果上传的是图片,可以使用图片服务进行后续处理
详细解答可以参考官方帮助文档
适用场景
当使用简单上传(PutObject)功能来上传较大的文件到OSS的时候,如果上传的过程中出现了网络错误,那么此次上传失败。重试必须从文件起始位置上传。针对这种情况,OSS提供了分片上传(Multipart Upload)来达到断点续传的效果。顾名思义,分片上传就是将要上传的文件分成多个数据块(OSS里又称之为Part)来分别上传,上传完成之后再调用OSS的接口将这些Part组合成一个Object。
相对于其他的上传方式,分片上传适用于以下场景:
恶劣的网络环境:如手机端,当出现上传失败的时候,可以对失败的Part进行独立的重试,而不需要重新上传其他的Part。
断点续传:中途暂停之后,可以从上次上传完成的Part的位置继续上传。
加速上传:要上传到OSS的本地文件很大的时候,可以并行上传多个Part以加快上传。
流式上传:可以在需要上传的文件大小还不确定的情况下开始上传。这种场景在视频监控等行业应用中比较常见。
基本流程
流程如下:
将要上传的文件按照一定的大小分片。
初始化一个分片上传任务(InitiateMultipartUpload)。
逐个或并行上传分片(UploadPart)。
完成上传(CompleteMultipartUpload)。
该过程需注意以下几点:
除了最后一块Part,其他Part的大小不能小于100KB,否则会导致调用CompleteMultipartUpload接口时失败。
要上传的文件切分成Part之后,文件顺序是通过上传过程中指定的partNumber来确定的,实际执行中并没有顺序要求,因此可以实现并发上传。具体的并发个数并不是越多速度越快,要结合用户自身的网络情况和设备负载综合考虑。
默认情况下,已经上传但还没有调用CompleteMultipartUpload的Part是不会自动回收的,因此如果要终止上传并删除占用的空间请调用AbortMultipartUpload。如果需要自动回收上传的Part,请参考Object生命周期管理。
断点续传
因为已经上传的Part的生命周期是永久的,因此很容易可以实现断点续传的功能。
在使用分片上传的过程中,如果系统意外崩溃,可以在重启的时候通过ListMultipartUploads和ListParts两个接口来获取某个Object上的所有的分片上传任务和每个分片上传任务中上传成功的Part列表。这样就可以从最后一块成功上传的Part开始继续上传,从而达到断点续传的效果。暂停和恢复上传实现原理也是一样的。
断点续传功能在移动设备和大文件上传中的优势尤为明显。
上传限制
大小限制:在这种上传方式下,Object的大小是由Part来决定的,最大支持10000块Part。每块Part最小100KB(最后一块可以比100KB小),最大5GB。Object的大小不能超过48.8TB。
命名限制
使用UTF-8编码。
长度必须在1–1023字节之间。
不能以正斜线(/)或者反斜线(\)字符开头。
上传的安全及授权
为了防止第三方往开发者的Bucket未经授权上传,OSS提供了Bucket和Object级别的访问权限控制,详细解释见访问控制。为了授权给第三方上传,OSS除了Bucket和Object级别的访问权限外,还提供了账号级别的授权,见上传安全之授权第三方。
上传后续操作
在文件上传到OSS上后,开发者可以使用上传后回调来向指定的应用服务器发起回调请求,进行下一步操作。
如果上传的是图片,可以使用图片服务进行后续处理。
如果上传的是音频或者视频文件,可以使用媒体转码进行后续处理。
功能使用参考:
API:
MultipartUpload
InitiateMultipartUpload
UploadPart
UploadPartCopy
CompleteMultipartUpload
AbortMultipartUpload
ListMultipartUploads
ListParts
Java SDK:分片上传
最佳实践
RAM和STS使用指南
Web端直传实践
赞0
踩1