追加上传是指通过AppendObject方法在已上传的追加类型文件(Appendable Object)末尾直接追加内容。

注意事项

  • 当文件不存在时,调用AppendObject接口会创建一个追加类型文件。
  • 当文件已存在时,如果文件为追加类型文件,且设置的追加位置和文件当前长度相等,则直接在该文件末尾追加内容;如果文件为追加类型文件,但是设置的追加位置和文件当前长度不相等,则抛出PositionNotEqualToLength异常;如果文件为非追加类型文件时,则抛出ObjectNotAppendable异常。
  • 追加类型文件暂不支持CopyObject操作。

示例代码

以下代码用于追加上传文件:

# -*- coding: utf-8 -*-
import oss2

# 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
# Endpoint以华东1(杭州)为例,其他Region请按实际情况填写。
# 填写Bucket名称,例如examplebucket。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')

# 如需在追加上传时设置相关Headers,请参考如下示例代码。
# headers = dict()
# 指定该Object的网页缓存行为。
# headers['Cache-Control'] = 'no-cache'
# 指定该Object被下载时的名称。
# headers['Content-Disposition'] = 'oss_MultipartUpload.txt'
# 指定该Object的内容编码格式。
# headers['Content-Encoding'] = 'utf-8'
# 该请求头用于检查消息内容是否与发送时一致。
# headers['Content-MD5'] = 'ohhnqLBJFiKkPSBO1eNaUA=='
# 指定过期日期。
# headers['Expires'] = 'Wed, 08 Jul 2022 16:57:01 GMT'
# 指定Object的访问权限ACL。此处指定为OBJECT_ACL_PRIVATE,表示私有访问权限。
# headers['x-oss-object-acl'] = oss2.OBJECT_ACL_PRIVATE
# 指定追加上传时是否覆盖同名Object。
# headers['x-oss-forbid-overwrite'] = 'true'
# 指定服务器端加密方式。此处指定为OSS完全托管密钥进行加密(SSE-OSS)。
# headers[OSS_SERVER_SIDE_ENCRYPTION] = SERVER_SIDE_ENCRYPTION_AES256
# 指定Object的存储类型。
# headers['x-oss-storage-class'] = oss2.BUCKET_STORAGE_CLASS_STANDARD
# 创建AppendObject时可以添加x-oss-meta-*,继续追加时不可以携带此参数。如果配置以x-oss-meta-*为前缀的参数,则该参数视为元数据。
# headers['x-oss-meta-author'] = 'Alice'
# result = bucket.append_object(exampledir/exampleobject.txt, 0, 'content of first append', headers=headers)

# 设置首次上传的追加位置(Position参数)为0。
# 填写不能包含Bucket名称在内的Object完整路径,例如exampledir/exampleobject.txt。
result = bucket.append_object('exampledir/exampleobject.txt', 0, 'content of first append')
# 如果不是首次上传,可以通过bucket.head_object方法或上次追加返回值的next_position属性,获取追加位置。
bucket.append_object('<yourObjectName>', result.next_position, 'content of second append')        

相关文档

  • 关于追加上传的完整示例代码,请参见GitHub示例
  • 关于追加上传的API接口说明,请参见AppendObject