这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天
本节笔记介绍我对阿里云对象存储OSS的简单使用和相关学习记录
存储空间
存储空间(Bucket)是用于存储对象(Object)的容器。在上传任意类型的Object前,您需要先创建Bucket。
创建存储空间操作步骤
- 登录阿里云OSS管理控制台
- 单击Bucket列表,然后单击创建Bucket
- 在创建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接口说明,请参见ListObjects(GetBucket)。
-
删除文件
- 关于删除单个文件的完整示例代码,请参见GitHub示例。
- 关于删除单个文件的API接口说明,请参见DeleteObject。