diff --git a/api/core/types/oss.go b/api/core/types/oss.go index bacfdad8..596ec3df 100644 --- a/api/core/types/oss.go +++ b/api/core/types/oss.go @@ -12,6 +12,7 @@ type MiniOssConfig struct { AccessKey string AccessSecret string Bucket string + SubDir string UseSSL bool Domain string } @@ -21,6 +22,7 @@ type QiNiuOssConfig struct { AccessKey string AccessSecret string Bucket string + SubDir string Domain string } @@ -29,6 +31,7 @@ type AliYunOssConfig struct { AccessKey string AccessSecret string Bucket string + SubDir string Domain string } diff --git a/api/service/oss/aliyun_oss.go b/api/service/oss/aliyun_oss.go index b917cc5f..a44b3547 100644 --- a/api/service/oss/aliyun_oss.go +++ b/api/service/oss/aliyun_oss.go @@ -32,6 +32,10 @@ func NewAliYunOss(appConfig *types.AppConfig) (*AliYunOss, error) { return nil, err } + if config.SubDir == "" { + config.SubDir = "gpt" + } + return &AliYunOss{ config: config, bucket: bucket, @@ -54,7 +58,7 @@ func (s AliYunOss) PutFile(ctx *gin.Context, name string) (string, error) { defer src.Close() 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) 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) } 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)) if err != nil { @@ -91,7 +95,8 @@ func (s AliYunOss) PutImg(imageURL string, useProxy bool) (string, error) { func (s AliYunOss) Delete(fileURL string) error { 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{} diff --git a/api/service/oss/minio_oss.go b/api/service/oss/minio_oss.go index edeaf4a7..fcd34c27 100644 --- a/api/service/oss/minio_oss.go +++ b/api/service/oss/minio_oss.go @@ -29,6 +29,9 @@ func NewMiniOss(appConfig *types.AppConfig) (MiniOss, error) { if err != nil { return MiniOss{}, err } + if config.SubDir == "" { + config.SubDir = "gpt" + } 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) } 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( context.Background(), s.config.Bucket, @@ -75,7 +78,7 @@ func (s MiniOss) PutFile(ctx *gin.Context, name string) (string, error) { defer fileReader.Close() 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{ 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 { 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{} diff --git a/api/service/oss/qiniu_oss.go b/api/service/oss/qiniu_oss.go index fbdb229c..dd605aec 100644 --- a/api/service/oss/qiniu_oss.go +++ b/api/service/oss/qiniu_oss.go @@ -21,7 +21,6 @@ type QinNiuOss struct { uploader *storage.FormUploader manager *storage.BucketManager proxyURL string - dir string } func NewQiNiuOss(appConfig *types.AppConfig) QinNiuOss { @@ -38,6 +37,9 @@ func NewQiNiuOss(appConfig *types.AppConfig) QinNiuOss { putPolicy := storage.PutPolicy{ Scope: config.Bucket, } + if config.SubDir == "" { + config.SubDir = "gpt" + } return QinNiuOss{ config: config, mac: mac, @@ -45,7 +47,6 @@ func NewQiNiuOss(appConfig *types.AppConfig) QinNiuOss { uploader: formUploader, manager: storage.NewBucketManager(mac, &storeConfig), proxyURL: appConfig.ProxyURL, - dir: "chatgpt-plus", } } @@ -63,7 +64,7 @@ func (s QinNiuOss) PutFile(ctx *gin.Context, name string) (string, error) { defer src.Close() 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{} 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) } 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{} extra := storage.PutExtra{} // 上传文件字节数据 @@ -104,7 +105,7 @@ func (s QinNiuOss) PutImg(imageURL string, useProxy bool) (string, error) { func (s QinNiuOss) Delete(fileURL string) error { 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) }