阿里云对象存储GO语言SDK的简单使用 | 青训营

134 阅读2分钟

在本次青训营项目中我们涉及到视频的存储与读取,因此首先可以考虑到对象存储系统。对象存储也称为基于对象的存储,是一种计算机数据存储架构,旨在处理大量非结构化数据。而本次讲的则是基于阿里云OSS系统的一系列基本操作。

官方GO语言SDK页面:github.com/aliyun/aliy…

首先是添加一位RAM用户并授予其管理对象存储OSS的权限,如果直接使用主用户的AccessKeyId以及AccessKeySecret是无法获取桶列表以及一系列数据的。

执行命令go get github.com/aliyun/aliyun-oss-go-sdk/oss以获取远程代码包。

首先初始化链接获取Client对象

 client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret")

其中Endpoint指的是访问域名,如: 这个桶是在华东1(杭州)那么Region ID为oss-cn-hangzhou,外网Endpoint为oss-cn-hangzhou.aliyuncs.com 内网Endpoint为oss-cn-hangzhou-internal.aliyuncs.com。一般情况下做单机只需要使用外网Endpoint。

具体官方文档:help.aliyun.com/zh/oss/user…

在初始化链接时还可以额外传入options属性,可以对Client对象进行配置具体配置。配置信息可以查看Config类的源码,有详细的注释。

func New(endpoint, accessKeyID, accessKeySecret string, options ...ClientOption) (*Client, error)

创建bucket

    client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret")
    if err != nil {
        // HandleError(err)
    }
    
    err = client.CreateBucket("bucket-name")
    if err != nil {
        // HandleError(err)
    }

这里我们可以直接调用Client中的CreateBucket来创建桶,其中桶的名称必须全网唯一,否则就会创建失败。

上传文件

    client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret")
    if err != nil {
        // HandleError(err)
    }
    
    bucket, err := client.Bucket("my-bucket")
    if err != nil {
        // HandleError(err)
    }
    
    err = bucket.PutObjectFromFile("my-object", "LocalFile")
    if err != nil {
        // HandleError(err)
    }

当然在上传文件之后我们会需要获取到文件的URL以传回到客户端实现视频播放,我们可以通过SignURL这个方法来获取到该对象所暴露出来的URL,第三个参数我们可以指定签名URL的有效时间,单位为秒。

url, err := bucket.SignURL("temp.jpg", oss.HTTPGet, 60)
fmt.Printf("Sign Url:%s\n", url)

至此所有该项目所需要的功能就能实现了,本文也到此为止。更详细的信息可以查看官方文档进行查看。