+ 我要发布
我发布的 我的标签 发现
浏览器扩展
斑点象@Edge

阿里云对象存储 OSS Python 追加上传

追加上传是指通过AppendObject方法在已上传的追加类型文件(Appendable Object)末尾直接追加内容。 + 本文以华东1(杭州)外网Endpoint为例。如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。关于OSS支持的Region与Endpoint的对应关系,请参见访问域名和数据中心。 + 本文以OSS域名新建OSSClient为例。如果您希望通过自定义域名、STS等方式新建OSSClient,请参见Python初始化。 要追加上传,您必须有oss:PutObject权限。具体操作,请参见为RAM用户授权自定义的权限策略。 + 当文件不存在时,调用AppendObject接口会创建一个追加类型文件。 + 当文件已存在时: ``` 如果文件为追加类型文件,且设置的追加位置和文件当前长度相等,则直接在该文件末尾追加内容。 如果文件为追加类型文件,但是设置的追加位置和文件当前长度不相等,则抛出PositionNotEqualToLength异常。 如果文件为非追加类型文件时,例如通过简单上传的文件类型为Normal的文件,则抛出ObjectNotAppendable异常。 ``` 示例代码: ``` #-*- coding: utf-8 -*- import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider #从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider()) #yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。 #填写Bucket名称。 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') ```
我的笔记