mirror of
https://gitee.com/XM-GO/PandaX.git
synced 2026-05-06 20:11:27 +08:00
88
kit/oss/aliyun.go
Normal file
88
kit/oss/aliyun.go
Normal file
@@ -0,0 +1,88 @@
|
||||
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(any(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
|
||||
}
|
||||
Reference in New Issue
Block a user