更新时间:2025-01-22 gmt 08:00
追加写对象-九游平台
使用场景
流式上传、表单上传、多段上传在上传结束之后内容是固定的,只能读取,不能修改。如果object内容发生了改变,只能重新上传同名的object来覆盖之前的内容。
对于上传日志、视频监控和视频直播等领域生成的实时视频流,使用以上上传方式,会存在软件架构复杂、客户端发送请求频繁造成服务器压力大、数据延时等问题。为了解决以上问题,可以使用追加写的方式上传对象,就是在指定桶内的一个对象尾追加上传数据,做到及时可读。当不存在相同对象键值的对象时,则创建新对象。
通过追加上传,可在视频数据产生之后及时将数据上传至同一个object,而客户端只需要定时获取该object的长度,并与上次读取的长度进行对比。如果发现有新的可读数据,则触发一次读操作来获取新上传的数据部分即可。通过这种方式可以简化架构,增强扩展性。
使用限制
- 每次追加上传都会更新该对象的最后修改时间。
- 服务端加密sse-c方式,那么追加上传和初始化段一样,设置诸如x-obs-server-side-encryption之类的请求header,后续追加上传也必须携带。
- 服务端加密sse-kms方式,有且只有第一次上传且桶内不存在同名对象时,才设置诸如x-obs-server-side-encryption之类的请求header,后续追加上传不携带。
- 每次追加上传的长度不能超过对象长度上限5g的限制。
- 每个appendable对象追加写次数最多为10000次。
- 如果对象存储类型为cold(归档存储)或deep_archive(深度归档存储),则不能调用该接口。
- 如果桶设置了跨区域复制配置,则不能调用该接口。
- 并行文件系统不支持追加写对象。
- 对一个已经存在的appendable对象进行put object操作,那么该appendable对象会被新object覆盖,类型变为normal对象,反之出错。
- appendable对象复制后变成normal对象,不支持appenable对象复制成appendable对象。
注意事项
- 当文件不存在时,调用appendobject接口会创建一个追加类型文件。
- 在开启了worm开关的桶中,使用追加写上传对象将失败并返回403。
- etag返回的是本次追加上传数据的hash值,不是整个对象的hash值。
- 当追加文件已存在时:
- 如果待追加的文件为追加类型文件,当设置的追加位置和文件当前长度相等,则直接在该文件末尾追加内容;当设置的追加位置和文件当前长度不相等,则抛出positionnotequaltolength异常。
- 如果待追加的文件为非追加类型文件时,例如通过简单上传的文件类型为normal的文件,则抛出objectnotappendable异常
使用方式
obs支持通过sdk、api方式追加写对象。
相关文档
意见反馈
文档内容是否对您有帮助?
提交成功!非常感谢您的反馈,我们会继续努力做到更好!
您可在查看反馈及问题处理状态。
系统繁忙,请稍后重试
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨