本文介绍如何使用Python SDK V2新增的File-Like接口访问存储空间的对象。
注意事项
本文示例代码以华东1(杭州)的地域ID
cn-hangzhou
为例,默认使用外网Endpoint,如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。关于OSS支持的Region与Endpoint的对应关系,请参见OSS地域和访问域名。本文以从环境变量读取访问凭证为例。如何配置访问凭证,请参见配置访问凭证。
要进行文件下载,您必须有
oss:GetObject
权限。具体操作,请参见为RAM用户授权自定义的权限策略。
方法定义
Python SDK V2新增了File-Like接口,以只读文件(ReadOnlyFile)的方式访问存储空间的对象。
提供了单流和并发+预取两种模式,您可以根据场景需要调整并发数,以提升读取速度。
接口内部实现了连接断掉重连的机制,在一些比较复杂的网络环境下,具备更好的鲁棒性。
class ReadOnlyFile:
...
def open_file(self, bucket: str, key: str, version_id: Optional[str] = None, request_payer: Optional[str] = None, **kwargs) -> ReadOnlyFile:
...
请求参数列表
参数名 | 类型 | 说明 |
bucket | str | 设置存储空间名字 |
key | str | 设置对象名 |
version_id | str | 指定对象的版本号,多版本下有效 |
request_payer | str | 启用了请求者付费模式时,需要设置为'requester' |
**kwargs | Any | (可选)任意参数,类型为字典 |
其中,kwargs选项说明列举如下:
参数名 | 类型 | 说明 |
enable_prefetch | bool | 是否启用预取模式,默认不启用 |
prefetch_num | int | 预取块的数量,默认值为3。启用预取模式时有效 |
chunk_size | int | 每个预取块的大小,默认值为6MiB。启用预取模式时有效 |
prefetch_threshold | int | 持续顺序读取多少字节后进入到预取模式,默认值为20MiB。启用预取模式时有效 |
block_size | int | 块的大小,默认值为None |
返回值列表
返回值名 | 类型 | 说明 |
file | ReadOnlyFile | 只读文件的实例 |
其中,ReadOnlyFile接口的常用方法列举如下:
方法名 | 说明 |
close(self) | 关闭文件句柄,释放资源,例如内存,活动的socket 等 |
read(self, n=None) | 从数据源中读取长度为len(p)的字节,存储到p中,返回读取的字节数和遇到的错误 |
seek(self, pos, whence=0) | 用于设置下一次读或写的偏移量。其中whence的取值:0:相对于头部,1:相对于当前偏移量,2:相对于尾部 |
Stat() (os.FileInfo, error) | 获取对象的信息,包括 对象大小,最后修改时间 以及元信息 |
注意:当预取模式打开时,如果出现多次乱序读时,则会自动退回单流模式。
示例代码
相关文档
关于类文件只读的更多信息,请参见开发者指南。