one-api/common/storage/drives/alioss.go
ZeroDeng e637095290
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获取
2024-06-01 12:11:31 +08:00

57 lines
1.2 KiB
Go

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
}