feat: add imgur image upload (#247)

### 新增环境变量
STORAGE_ALIOSS_ENDPOINT:Endpoint(地域节点),比如`oss-cn-beijing.aliyuncs.com`
STORAGE_ALIOSS_BUCKET_NAME:Bucket名称,比如`zerodeng-superai`
STORAGE_ALIOSS_ACCESS_KEY_ID:阿里授权KEY,在RAM获取
STORAGE_ALIOSS_ACCESS_KEY_SECRET:阿里授权SECRET,在RAM获取
This commit is contained in:
ZeroDeng
2024-06-01 12:11:31 +08:00
committed by GitHub
parent acf61f8b89
commit e637095290
6 changed files with 109 additions and 1 deletions

View File

@@ -0,0 +1,56 @@
package drives
import (
"bytes"
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
type AliOSSUpload struct {
Endpoint string
AccessKeyId string
AccessKeySecret string
BucketName string
}
func NewAliOSSUpload(endpoint, accessKeyId, accessKeySecret, bucketName string) *AliOSSUpload {
return &AliOSSUpload{
Endpoint: endpoint,
AccessKeyId: accessKeyId,
AccessKeySecret: accessKeySecret,
BucketName: bucketName,
}
}
func (a *AliOSSUpload) Name() string {
return "AliOSS"
}
func (a *AliOSSUpload) Upload(data []byte, fileName string) (string, error) {
// Create OSS Client
client, err := oss.New(a.Endpoint, a.AccessKeyId, a.AccessKeySecret)
if err != nil {
return "", fmt.Errorf("creating OSS client: %w", err)
}
// Create Bucket
bucket, err := client.Bucket(a.BucketName)
if err != nil {
return "", fmt.Errorf("getting bucket: %w", err)
}
// Upload File
reader := bytes.NewReader(data)
err = bucket.PutObject(fileName, reader)
if err != nil {
return "", fmt.Errorf("uploading file: %w", err)
}
// Get Object URL
objectURL, err := bucket.SignURL(fileName, oss.HTTPGet, 3600)
if err != nil {
return "", fmt.Errorf("signing object URL: %w", err)
}
return objectURL, nil
}

View File

@@ -13,6 +13,30 @@ type Storage struct {
func InitStorage() {
InitImgurStorage()
InitSMStorage()
InitALIOSSStorage()
}
func InitALIOSSStorage() {
endpoint := viper.GetString("storage.alioss.endpoint")
if endpoint == "" {
return
}
accessKeyId := viper.GetString("storage.alioss.accessKeyId")
if accessKeyId == "" {
return
}
accessKeySecret := viper.GetString("storage.alioss.accessKeySecret")
if accessKeySecret == "" {
return
}
bucketName := viper.GetString("storage.alioss.bucketName")
if bucketName == "" {
return
}
aliUpload := drives.NewAliOSSUpload(endpoint, accessKeyId, accessKeySecret, bucketName)
AddStorageDrive(aliUpload)
}
func InitSMStorage() {

View File

@@ -22,7 +22,24 @@ func InitConfig() {
viper.ReadInConfig()
requester.InitHttpClient()
}
func TestALIOSSUpload(t *testing.T) {
InitConfig()
endpoint := viper.GetString("storage.alioss.endpoint")
accessKeyId := viper.GetString("storage.alioss.accessKeyId")
accessKeySecret := viper.GetString("storage.alioss.accessKeySecret")
bucketName := viper.GetString("storage.alioss.bucketName")
aliUpload := drives.NewAliOSSUpload(endpoint, accessKeyId, accessKeySecret, bucketName)
image, err := base64.StdEncoding.DecodeString(testImageB64)
if err != nil {
fmt.Println(err)
}
url, err := aliUpload.Upload(image, utils.GetUUID()+".png")
fmt.Println(url)
fmt.Println(err)
assert.Nil(t, err)
}
func TestSMMSUpload(t *testing.T) {
InitConfig()
smSecret := viper.GetString("storage.smms.secret")