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