mirror of
				https://github.com/yangjian102621/geekai.git
				synced 2025-11-04 16:23:42 +08:00 
			
		
		
		
	chore: add sub dir support for OSS
This commit is contained in:
		@@ -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
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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{}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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{}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user