对象存储(OSS) | 青训营笔记

106 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第4篇笔记

这次的青训营项目中视频和图片的存储,如果保存在本地,那么每次从服务器中读取数据会给服务造成很大的压力,导致程序的运行速度变慢。因此可以考虑使用对象存储将这些数据保存在云端,以减小服务器的压力。

对象存储适合保存大的静态文件

image-20220610234338239.png 对象存储属于分布式存储

优点:

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)
   }

更多详细丰富的功能可以去阿里云帮助中心查看和学习。