追加上传指的是使用OSS API中的AppendObject在已上传的Appendable Object类型文件后面直接追加内容。

说明 追加上传的API接口的详细信息请参见AppendObject

适用场景

之前提到的上传方式,比如简单上传表单上传断点续传上传等,创建的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还提供了账号级别的授权。详情请参见授权给第三方上传

上传后续操作

  • 如果上传的是图片,您还可以进行图片处理
  • 如果上传是音频或者视频文件,您还可以进行媒体处理
说明 追加上传不支持上传回调操作。