追加上传
追加上传指的是使用OSS API中的AppendObject在已上传的Appendable Object类型文件后面直接追加内容。
适用场景
之前提到的上传方式,比如简单上传,表单上传,断点续传上传等,创建的Object都是Normal类型,这种Object在上传结束之后内容就是固定的,只能读取,不能修改。如果Object内容发生了改变,只能重新上传同名的Object来覆盖之前的内容,这也是OSS和普通文件系统使用的一个重大区别。
正因为这种特性,在很多应用场景下会很不方便,比如视频监控、视频直播领域等,视频数据在实时的不断产生。如果使用其他上传方式,只能将视频流按照一定规律切分成小块然后不断的上传新的Object。这种方式在实际使用上存在很明显的缺点:
- 软件架构比较复杂,需要考虑文件分块等细节问题。
- 需要有位置保存元信息,比如已经生成的Object列表等,然后每次请求都重复读取元信息来判断是否有新的Object生成。这样对服务器的压力很大,而且客户端每次都需要发送两次网络请求,延时上也会有一定的影响。
- 如果Object切分的比较小的话,延时比较低,但是众多Object会导致管理起来很复杂。如果Object切分的比较大的话,数据的延时又会很高。
为了简化这种场景下的开发成本,OSS提供了追加上传(Append Object)的方式,在一个Object后面直接追加内容。通过这种方式操作的Object的类型为Appendable Object,而其他的方式上传的Object类型为Normal Object。每次追加上传的数据都能够即时可读。
如果使用追加上传,那么上述场景的架构就变得很简单。视频数据产生之后即时地通过追加上传到同一个Object,而客户端只需要定时获取该Object的长度与上次读取的长度进行对比,如果发现有新的数据可读,那么就触发一次读操作来获取新上传的数据部分即可。通过这种方式可以很大的简化架构,增强扩展性。
不仅在视频场景,在日志追加上传的场景下,追加上传也能发挥作用。
操作方式
操作方式 | 说明 |
---|---|
命令行工具ossutil | 命令行工具,性能好 |
Java SDK | 丰富、完整的各类语言SDK demo |
Python SDK | |
PHP SDK | |
Go SDK | |
C SDK | |
.NET SDK | |
Android SDK | |
iOS SDK |
上传限制
- 大小限制:在这种上传方式下,Object不能超过5GB。
- 命名限制:
- 使用UTF-8编码。
- 长度必须在1–1023字节之间。
- 不能以正斜线(/)或者反斜线(\)字符开头。
- 文件类型:只有通过追加上传创建的文件才可以后续继续被追加上传。也就是说,其他通过简单上传、表单上传、分片上传得到的文件,不能在这些文件后面追加上传新的内容。
- 后续操作限制:通过追加上传的文件,不能被复制,可以修改文件本身的meta信息。
上传的安全及授权
为了防止第三方未经授权往您的Bucket里上传数据,OSS提供了Bucket和Object级别的访问权限控制。详情请参见权限控制。
为了授权给第三方上传,OSS还提供了账号级别的授权。详情请参见授权给第三方上传。
上传后续操作
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论