阿里云对象存储OSS GoSDK入门学习 | 青训营笔记

68 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天

本节笔记介绍我对阿里云对象存储OSS的简单使用和相关学习记录

存储空间

存储空间(Bucket)是用于存储对象(Object)的容器。在上传任意类型的Object前,您需要先创建Bucket。

创建存储空间操作步骤

  1. 登录阿里云OSS管理控制台
  2. 单击Bucket列表,然后单击创建Bucket
  3. 在创建Bucket面板,按如下说明配置必要的参数

Bucket创建参数

  • Bucket名称
    • Bucket的名称。Bucket一旦创建,则无法更改其名称。
    • 命名规则如下:
      • Bucket名称必须全局唯一。
      • 只能包括小写字母、数字和短划线(-)。
      • 必须以小写字母或者数字开头和结尾。
      • 长度必须在3~63字符之间。
  • 地域
    • Bucket的数据中心。Bucket一旦创建,则无法更改其所在地域。
  • 存储冗余类型
    • 本地冗余存储

      • 采用单可用区(AZ)内的数据冗余存储机制,将用户的数据冗余存储在同一个可用区内多个设施的多个设备上,确保硬件失效时的数据持久性和可用性。
    • 同城冗余存储(推荐)

      • 采用多可用区(AZ)内的数据冗余存储机制,将用户的数据冗余存储在同一地域(Region)的多个可用区。当某个可用区不可用时,仍然能够保障数据的正常访问。

Go SDK 对象存储入门

简单介绍常见操作

创建存储空间

存储空间是OSS全局命名空间,相当于数据的容器,可以存储若干文件。 以下代码用于新建一个存储空间:

package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func handleError(err error) {
   fmt.Println("Error:", err)
   os.Exit(-1)
}

func main() {
   // yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
   endpoint := "yourEndpoint"
   // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
   accessKeyId := "yourAccessKeyId"
   accessKeySecret := "yourAccessKeySecret"
   // yourBucketName填写Bucket名称。
   bucketName := "yourBucketName"
   // 创建OSSClient实例。
   client, err := oss.New(endpoint, accessKeyId, accessKeySecret)
   if err != nil {
      handleError(err)
   }
   // 创建存储空间。
   err = client.CreateBucket(bucketName)
   if err != nil {
      handleError(err)
   }
}

上传文件

package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func handleError(err error) {
   fmt.Println("Error:", err)
   os.Exit(-1)
}

func main() {
   // yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
   endpoint := "yourEndpoint"
   // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
   accessKeyId := "yourAccessKeyId"
   accessKeySecret := "yourAccessKeySecret"
   // yourBucketName填写存储空间名称。
   bucketName := "yourBucketName"
   // yourObjectName填写Object完整路径,完整路径不包含Bucket名称。
   objectName := "yourObjectName"
   // yourLocalFileName填写本地文件的完整路径。
   localFileName := "yourLocalFileName"
   // 创建OSSClient实例。
   client, err := oss.New(endpoint, accessKeyId, accessKeySecret)
   if err != nil {
      handleError(err)
   }
   // 获取存储空间。
   bucket, err := client.Bucket(bucketName)
   if err != nil {
      handleError(err)
   }
   // 上传文件。
   err = bucket.PutObjectFromFile(objectName, localFileName)
   if err != nil {
      handleError(err)
   }
}

核心代码:

 // 创建OSSClient实例。
 client, err := oss.New(endpoint, accessKeyId, accessKeySecret)
 // 获取存储空间。
 bucket, err := client.Bucket(bucketName)
 // 上传文件。
 err = bucket.PutObjectFromFile(objectName, localFileName)

根据以上两段代码我们可以看出有相关重复的操作,即bucket的连接和创建

我们可以写阿里云对象存储oss连接的相关配置文件,然后统一进行连接

配置文件代码

#阿里云对象存储 
[oss]
Endpoint = "****************"
AccessKeyID  = "****************"
AccessKeySecret = "****************"
Bucket = "****************"
VideoUrl = "****************"
ImageUrl = "****************"

读取配置文件代码

type Oss struct {
   Endpoint        string
   AccessKeyID     string
   AccessKeySecret string
   Bucket          string
   VideoUrl        string
   ImageUrl        string
}

var OSS oss

// 包初始化加载时候会调用的函数
func init() {
   if _, err := toml.DecodeFile("config/config.toml", &OSS); err != nil {
      panic(err)
   }
   //去除左右的空格
   strings.Trim(OSS.Endpoint, " ")
}

func ReturnOss() Oss {
   return OSS
}

初始化代码

package models

import (
   "fmt"
   "github.com/aliyun/aliyun-oss-go-sdk/oss"
   "os"
   "tiktok_Demo/config"
)

var InitBucket *oss.Bucket

func init() {
   config := config.ReturnConfig()

   Endpoint := config.Endpoint
   AccessKeyID := config.AccessKeyID
   AccessKeySecret := config.AccessKeySecret
   Bucket := config.Bucket

   client, err := oss.New(Endpoint, AccessKeyID, AccessKeySecret)
   if err != nil {
      fmt.Println("Error:", err)
      os.Exit(-1)
   }

   // 指定bucket
   InitBucket, err = client.Bucket(Bucket) // 根据自己的填写
   if err != nil {
      fmt.Println("Error:", err)
      os.Exit(-1)
   }
}

对象存储阿里云oss Go SDK 相关文档

  • 创建存储空间

    • 关于创建存储空间的完整示例代码,请参见GitHub示例
    • 关于创建存储空间的API接口说明,请参见PutBucket
  • 上传文件

    • 关于上传文件的完整示例代码,请参见GitHub示例
    • 关于上传文件的API接口说明,请参见PutObject
  • 下载文件

    • 关于下载文件的完整示例代码,请参见GitHub示例
    • 关于下载文件的API接口说明,请参见GetObject
  • 列举文件

  • 删除文件

    • 关于删除单个文件的完整示例代码,请参见GitHub示例
    • 关于删除单个文件的API接口说明,请参见DeleteObject