这是我参与「第三届青训营 -后端场」笔记创作活动的第4篇笔记
这次的青训营项目中视频和图片的存储,如果保存在本地,那么每次从服务器中读取数据会给服务造成很大的压力,导致程序的运行速度变慢。因此可以考虑使用对象存储将这些数据保存在云端,以减小服务器的压力。
对象存储适合保存大的静态文件
对象存储属于分布式存储
优点:
1、支持>EB海量存储
2、对象数量无限制
3、Restful HTTP接口,开发极其简单
4、云原生,按需申请使用
5、视频图片相关生态丰富
6、使用普通X86服务器
7、具备冷热数据分级存储能力、成本更低
具体实现(阿里云OSS):
上传文件:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
client, err := oss.New("yourEndpoint", "yourAccessKeyId", "yourAccessKeySecret")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 填写存储空间名称,例如examplebucket。
bucket, err := client.Bucket("examplebucket")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 依次填写Object的完整路径(例如exampledir/exampleobject.txt)和本地文件的完整路径(例如D:\\localpath\\examplefile.txt)。
err = bucket.PutObjectFromFile("exampledir/exampleobject.txt", "D:\\localpath\\examplefile.txt")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
列举指定个数的存储空间:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
client, err := oss.New("yourEndpoint", "yourAccessKeyId", "yourAccessKeySecret")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 列举当前账号所有地域下的存储空间,限定此次列举存储空间的最大个数为500。默认值为100,最大值为1000。
lsRes, err = client.ListBuckets(oss.MaxKeys(500))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 打印存储空间列表。
fmt.Println("My buckets max num:", lsRes.Buckets)
for _, bucket := range lsRes.Buckets {
fmt.Println("Bucket with maxKeys: ", bucket.Name)
}
更多详细丰富的功能可以去阿里云帮助中心查看和学习。