Files
PandaX/base/oss/aliyun.go
2022-01-14 17:37:01 +08:00

89 lines
2.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package oss
import (
"github.com/pkg/errors"
"io"
aliOssSdk "github.com/aliyun/aliyun-oss-go-sdk/oss"
)
//oss 上传配置
type AliConfig struct {
AccessKey string `json:"access_key"`
SecretKey string `json:"secret_key"`
Bucket string `json:"bucket"`
Endpoint string `json:"endpoint"`
}
//oss 根据参数来创建 Bucket
func (c *AliConfig) CreateBucket() (bucket *aliOssSdk.Bucket, err error) {
// Endpoint以杭州为例其它Region请按实际情况填写。
endpoint := c.Endpoint
// 阿里云主账号AccessKey拥有所有API的访问权限风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维请登录 https://ram.console.aliyun.com 创建RAM账号。
accessKeyId := c.AccessKey
accessKeySecret := c.SecretKey
bucketName := c.Bucket
// 创建OSSClient实例。
ossClient, err := aliOssSdk.New(endpoint, accessKeyId, accessKeySecret)
if err != nil {
return nil, errors.Wrapf(err, "创建 aliyun OSSClient实例失败")
}
// 获取存储空间。
bucket, err = ossClient.Bucket(bucketName)
if err != nil {
return nil, errors.Wrapf(err, "获取 aliyun OSS 存储空间失败")
}
return
}
//oss 上传客户端
type aliOss struct {
bucket *aliOssSdk.Bucket
}
func NewAliOss(c AliConfig) Driver {
bucket, err := c.CreateBucket()
if err != nil {
panic(err)
}
return &aliOss{
bucket: bucket,
}
}
// Put 上传
func (c *aliOss) Put(objectName string, localFileName string) error {
err := c.bucket.PutObjectFromFile(objectName, localFileName)
if err != nil {
return errors.Wrapf(err, "put oss file fail")
}
return nil
}
func (c *aliOss) PutObj(objectName string, file io.Reader) error {
err := c.bucket.PutObject(objectName, file)
if err != nil {
return errors.Wrapf(err, "put oss file fail")
}
return nil
}
// Get 下载
func (c *aliOss) Get(objectName, downloadedFileName string) error {
err := c.bucket.GetObjectToFile(objectName, downloadedFileName)
if err != nil {
return errors.Wrapf(err, "get oss file fail")
}
return nil
}
// Del 删除
func (c *aliOss) Del(objectName string) error {
// 删除文件。
err := c.bucket.DeleteObject(objectName)
if err != nil {
return errors.Wrapf(err, "del oss file fail")
}
return nil
}