chore: add sub dir support for OSS

This commit is contained in:
RockYang 2023-12-13 17:02:49 +08:00
parent a398e7a550
commit 4a56621ec3
4 changed files with 24 additions and 11 deletions

View File

@ -12,6 +12,7 @@ type MiniOssConfig struct {
AccessKey string AccessKey string
AccessSecret string AccessSecret string
Bucket string Bucket string
SubDir string
UseSSL bool UseSSL bool
Domain string Domain string
} }
@ -21,6 +22,7 @@ type QiNiuOssConfig struct {
AccessKey string AccessKey string
AccessSecret string AccessSecret string
Bucket string Bucket string
SubDir string
Domain string Domain string
} }
@ -29,6 +31,7 @@ type AliYunOssConfig struct {
AccessKey string AccessKey string
AccessSecret string AccessSecret string
Bucket string Bucket string
SubDir string
Domain string Domain string
} }

View File

@ -32,6 +32,10 @@ func NewAliYunOss(appConfig *types.AppConfig) (*AliYunOss, error) {
return nil, err return nil, err
} }
if config.SubDir == "" {
config.SubDir = "gpt"
}
return &AliYunOss{ return &AliYunOss{
config: config, config: config,
bucket: bucket, bucket: bucket,
@ -54,7 +58,7 @@ func (s AliYunOss) PutFile(ctx *gin.Context, name string) (string, error) {
defer src.Close() defer src.Close()
fileExt := filepath.Ext(file.Filename) fileExt := filepath.Ext(file.Filename)
objectKey := fmt.Sprintf("%d%s", time.Now().UnixMicro(), fileExt) objectKey := fmt.Sprintf("%s/%d%s", s.config.SubDir, time.Now().UnixMicro(), fileExt)
// 上传文件 // 上传文件
err = s.bucket.PutObject(objectKey, src) err = s.bucket.PutObject(objectKey, src)
if err != nil { if err != nil {
@ -80,7 +84,7 @@ func (s AliYunOss) PutImg(imageURL string, useProxy bool) (string, error) {
return "", fmt.Errorf("error with parse image URL: %v", err) return "", fmt.Errorf("error with parse image URL: %v", err)
} }
fileExt := filepath.Ext(parse.Path) fileExt := filepath.Ext(parse.Path)
objectKey := fmt.Sprintf("%d%s", time.Now().UnixMicro(), fileExt) objectKey := fmt.Sprintf("%s/%d%s", s.config.SubDir, time.Now().UnixMicro(), fileExt)
// 上传文件字节数据 // 上传文件字节数据
err = s.bucket.PutObject(objectKey, bytes.NewReader(imageData)) err = s.bucket.PutObject(objectKey, bytes.NewReader(imageData))
if err != nil { if err != nil {
@ -91,7 +95,8 @@ func (s AliYunOss) PutImg(imageURL string, useProxy bool) (string, error) {
func (s AliYunOss) Delete(fileURL string) error { func (s AliYunOss) Delete(fileURL string) error {
objectName := filepath.Base(fileURL) objectName := filepath.Base(fileURL)
return s.bucket.DeleteObject(objectName) key := fmt.Sprintf("%s/%s", s.config.SubDir, objectName)
return s.bucket.DeleteObject(key)
} }
var _ Uploader = AliYunOss{} var _ Uploader = AliYunOss{}

View File

@ -29,6 +29,9 @@ func NewMiniOss(appConfig *types.AppConfig) (MiniOss, error) {
if err != nil { if err != nil {
return MiniOss{}, err return MiniOss{}, err
} }
if config.SubDir == "" {
config.SubDir = "gpt"
}
return MiniOss{config: config, client: minioClient, proxyURL: appConfig.ProxyURL}, nil return MiniOss{config: config, client: minioClient, proxyURL: appConfig.ProxyURL}, nil
} }
@ -48,7 +51,7 @@ func (s MiniOss) PutImg(imageURL string, useProxy bool) (string, error) {
return "", fmt.Errorf("error with parse image URL: %v", err) return "", fmt.Errorf("error with parse image URL: %v", err)
} }
fileExt := filepath.Ext(parse.Path) fileExt := filepath.Ext(parse.Path)
filename := fmt.Sprintf("%d%s", time.Now().UnixMicro(), fileExt) filename := fmt.Sprintf("%s/%d%s", s.config.SubDir, time.Now().UnixMicro(), fileExt)
info, err := s.client.PutObject( info, err := s.client.PutObject(
context.Background(), context.Background(),
s.config.Bucket, s.config.Bucket,
@ -75,7 +78,7 @@ func (s MiniOss) PutFile(ctx *gin.Context, name string) (string, error) {
defer fileReader.Close() defer fileReader.Close()
fileExt := filepath.Ext(file.Filename) fileExt := filepath.Ext(file.Filename)
filename := fmt.Sprintf("%d%s", time.Now().UnixMicro(), fileExt) filename := fmt.Sprintf("%s/%d%s", s.config.SubDir, time.Now().UnixMicro(), fileExt)
info, err := s.client.PutObject(ctx, s.config.Bucket, filename, fileReader, file.Size, minio.PutObjectOptions{ info, err := s.client.PutObject(ctx, s.config.Bucket, filename, fileReader, file.Size, minio.PutObjectOptions{
ContentType: file.Header.Get("Content-Type"), ContentType: file.Header.Get("Content-Type"),
}) })
@ -88,7 +91,8 @@ func (s MiniOss) PutFile(ctx *gin.Context, name string) (string, error) {
func (s MiniOss) Delete(fileURL string) error { func (s MiniOss) Delete(fileURL string) error {
objectName := filepath.Base(fileURL) objectName := filepath.Base(fileURL)
return s.client.RemoveObject(context.Background(), s.config.Bucket, objectName, minio.RemoveObjectOptions{}) key := fmt.Sprintf("%s/%s", s.config.SubDir, objectName)
return s.client.RemoveObject(context.Background(), s.config.Bucket, key, minio.RemoveObjectOptions{})
} }
var _ Uploader = MiniOss{} var _ Uploader = MiniOss{}

View File

@ -21,7 +21,6 @@ type QinNiuOss struct {
uploader *storage.FormUploader uploader *storage.FormUploader
manager *storage.BucketManager manager *storage.BucketManager
proxyURL string proxyURL string
dir string
} }
func NewQiNiuOss(appConfig *types.AppConfig) QinNiuOss { func NewQiNiuOss(appConfig *types.AppConfig) QinNiuOss {
@ -38,6 +37,9 @@ func NewQiNiuOss(appConfig *types.AppConfig) QinNiuOss {
putPolicy := storage.PutPolicy{ putPolicy := storage.PutPolicy{
Scope: config.Bucket, Scope: config.Bucket,
} }
if config.SubDir == "" {
config.SubDir = "gpt"
}
return QinNiuOss{ return QinNiuOss{
config: config, config: config,
mac: mac, mac: mac,
@ -45,7 +47,6 @@ func NewQiNiuOss(appConfig *types.AppConfig) QinNiuOss {
uploader: formUploader, uploader: formUploader,
manager: storage.NewBucketManager(mac, &storeConfig), manager: storage.NewBucketManager(mac, &storeConfig),
proxyURL: appConfig.ProxyURL, proxyURL: appConfig.ProxyURL,
dir: "chatgpt-plus",
} }
} }
@ -63,7 +64,7 @@ func (s QinNiuOss) PutFile(ctx *gin.Context, name string) (string, error) {
defer src.Close() defer src.Close()
fileExt := filepath.Ext(file.Filename) fileExt := filepath.Ext(file.Filename)
key := fmt.Sprintf("%s/%d%s", s.dir, time.Now().UnixMicro(), fileExt) key := fmt.Sprintf("%s/%d%s", s.config.SubDir, time.Now().UnixMicro(), fileExt)
// 上传文件 // 上传文件
ret := storage.PutRet{} ret := storage.PutRet{}
extra := storage.PutExtra{} extra := storage.PutExtra{}
@ -91,7 +92,7 @@ func (s QinNiuOss) PutImg(imageURL string, useProxy bool) (string, error) {
return "", fmt.Errorf("error with parse image URL: %v", err) return "", fmt.Errorf("error with parse image URL: %v", err)
} }
fileExt := filepath.Ext(parse.Path) fileExt := filepath.Ext(parse.Path)
key := fmt.Sprintf("%s/%d%s", s.dir, time.Now().UnixMicro(), fileExt) key := fmt.Sprintf("%s/%d%s", s.config.SubDir, time.Now().UnixMicro(), fileExt)
ret := storage.PutRet{} ret := storage.PutRet{}
extra := storage.PutExtra{} extra := storage.PutExtra{}
// 上传文件字节数据 // 上传文件字节数据
@ -104,7 +105,7 @@ func (s QinNiuOss) PutImg(imageURL string, useProxy bool) (string, error) {
func (s QinNiuOss) Delete(fileURL string) error { func (s QinNiuOss) Delete(fileURL string) error {
objectName := filepath.Base(fileURL) objectName := filepath.Base(fileURL)
key := fmt.Sprintf("%s/%s", s.dir, objectName) key := fmt.Sprintf("%s/%s", s.config.SubDir, objectName)
return s.manager.Delete(s.config.Bucket, key) return s.manager.Delete(s.config.Bucket, key)
} }