在本次青训营项目中我们涉及到视频的存储与读取,因此首先可以考虑到对象存储系统。对象存储也称为基于对象的存储,是一种计算机数据存储架构,旨在处理大量非结构化数据。而本次讲的则是基于阿里云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)
至此所有该项目所需要的功能就能实现了,本文也到此为止。更详细的信息可以查看官方文档进行查看。