You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 lines
1.8 KiB
Go

package utils
import (
"Lee-WineList/config"
"fmt"
"git.echol.cn/loser/logger/log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"io"
)
type ossUtils struct{}
func OssUtils() *ossUtils {
return &ossUtils{}
}
// UploadReader 上传文件 - io.Reader
func (o ossUtils) UploadReader(fileName string, data io.Reader) (string, error) {
// 创建OSSClient实例。
client, err := oss.New(config.Scd.Aliyun.Oss.Endpoint, config.Scd.Aliyun.Oss.AccessKeyId, config.Scd.Aliyun.Oss.AccessKeySecret)
if err != nil {
log.Errorf("创建OSSClient实例失败: %s", err)
return "", err
}
// 获取存储空间。
bucket, err := client.Bucket(config.Scd.Aliyun.Oss.Bucket)
if err != nil {
log.Errorf("获取存储空间失败: %s", err)
return "", err
}
// 指定存储类型为标准存储,默认为标准存储。
storageType := oss.ObjectStorageClass(oss.StorageStandard)
// 指定访问权限为公共读默认为继承bucket的权限。
objectAcl := oss.ObjectACL(oss.ACLPublicRead)
// 上传文件
err = bucket.PutObject(fileName, data, storageType, objectAcl)
if err != nil {
log.Errorf("上传文件失败: %s", err)
return "", err
}
fileUrl := fmt.Sprintf("https://%s.%s/%s", config.Scd.Aliyun.Oss.Bucket, config.Scd.Aliyun.Oss.Endpoint, fileName)
return fileUrl, err
}
func (o ossUtils) GetFile(fileName, localFilePath string) error {
client, err := oss.New(config.Scd.Aliyun.Oss.Endpoint, config.Scd.Aliyun.Oss.AccessKeyId, config.Scd.Aliyun.Oss.AccessKeySecret)
if err != nil {
log.Errorf("创建OSSClient实例失败: %s", err)
return err
}
// 获取存储空间。
bucket, err := client.Bucket(config.Scd.Aliyun.Oss.Bucket)
if err != nil {
log.Errorf("获取存储空间失败: %s", err)
return err
}
err = bucket.GetObjectToFile(fileName, localFilePath)
if err != nil {
return err
}
return nil
}