适用场景

之前提到的上传方式,比如简单上传表单上传断点续传上传等,创建的Object都是Normal类型,这种Object在上传结束之后内容就是固定的,只能读取,不能修改。如果Object内容发生了改变,只能重新上传同名的Object来覆盖之前的内容,这也是OSS和普通文件系统使用的一个重大区别。

正因为这种特性,在很多应用场景下会很不方便,典型比如视频监控、视频直播领域等,视频数据在实时的不断产生。如果使用其他上传方式,只能将视频流按照一定规律切分成小块然后不断的上传新的Object。这种方式在实际使用上存在很明显的缺点:

  • 软件架构比较复杂,需要考虑文件分块等细节问题。
  • 需要有位置保存元数据,比如已经生成的Object列表等,然后每次请求都重复读取元数据来判断是否有新的Object生成。这样对服务器的压力很大,而且客户端每次都需要发送两次网络请求,延时上也会有一定的影响。
  • 如果Object切分的比较小的话,延时比较低,但是众多Object会导致管理起来很复杂。如果Object切分的比较大的话,数据的延时又会很高。

为了简化这种场景下的开发成本,OSS提供了追加上传(Append Object)的方式在一个Object后面直接追加内容的功能。通过这种方式操作的Object的类型为Appendable Object,而其他的方式上传的Object类型为Normal Object。每次追加上传的数据都能够即时可读。

如果使用追加上传,那么上述场景的架构就变得很简单。视频数据产生之后即时地通过追加上传到同一个Object,而客户端只需要定时获取该Object的长度与上次读取的长度进行对比,如果发现有新的数据可读,那么就触发一次读操作来获取新上传的数据部分即可。通过这种方式可以很大的简化架构,增强扩展性。

不仅在视频场景,在日志追加上传的场景下,追加上传也能发挥作用。

上传限制

  • 大小限制:在这种上传方式下,Object不能超过5GB。
  • 命名限制:
    • 使用UTF-8编码。
    • 长度必须在1–1023字节之间。
    • 不能以正斜线(/)或者反斜线(\)字符开头。
  • 文件类型:只有通过追加上传创建的文件才可以后续继续被追加上传。也就是说,其他通过简单上传、表单上传、分片上传得到的文件,不能在这些文件后面追加上传新的内容。
  • 后续操作限制:通过追加上传的文件,不能被复制,可以修改文件本身的meta信息。

上传的安全及授权

为了防止第三方往开发者的Bucket未经授权上传,OSS提供了Bucket和Object级别的访问权限控制,详细解释见访问控制。为了授权给第三方上传,OSS除了Bucket和Object级别的访问权限外,还提供了账号级别的授权,见上传安全之授权第三方

上传后续操作

如果上传的是图片需要处理,可以使用图片处理。如果上传的是音频或者视频文件也可以使用媒体处理

功能使用参考

说明
追加上传不支持上传回调操作。

最佳实践