mirror of
https://github.com/yangjian102621/geekai.git
synced 2026-08-12 18:50:58 +00:00
9ccff4efbc
- Sync backend and frontend from GeekAI Plus v4.3.0 - Remove commercial License flows and update open-source deployment defaults - Preserve Docker Compose deployment and bump image tags to v4.3.0 BREAKING CHANGE: commercial License configuration and related endpoints are removed
143 lines
3.6 KiB
Go
143 lines
3.6 KiB
Go
package oss
|
|
|
|
// * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
// * Copyright 2023 The Geek-AI Authors. All rights reserved.
|
|
// * Use of this source code is governed by a Apache-2.0 license
|
|
// * that can be found in the LICENSE file.
|
|
// * @Author yangjian102621@163.com
|
|
// * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
|
import (
|
|
"fmt"
|
|
"geekai/core/types"
|
|
"strings"
|
|
|
|
"geekai/log"
|
|
)
|
|
|
|
var logger = log.GetLogger()
|
|
|
|
// 默认缩略图模板(本地存储格式)
|
|
const DefaultThumbTemplate = "?imageView2/4/w/{width}/h/{height}/q/75"
|
|
|
|
type UploaderManager struct {
|
|
local *LocalStorage
|
|
aliyun *AliYunOss
|
|
mini *MiniOss
|
|
qiniu *QiNiuOss
|
|
tencent *TencentOss
|
|
active string
|
|
ossConfig types.OSSConfig // 保存当前OSS配置
|
|
}
|
|
|
|
func NewUploaderManager(sysConfig *types.SystemConfig, local *LocalStorage, aliyun *AliYunOss, mini *MiniOss, qiniu *QiNiuOss, tencent *TencentOss) (*UploaderManager, error) {
|
|
if sysConfig.OSS.Active == "" {
|
|
sysConfig.OSS.Active = Local
|
|
}
|
|
|
|
return &UploaderManager{
|
|
active: sysConfig.OSS.Active,
|
|
local: local,
|
|
aliyun: aliyun,
|
|
mini: mini,
|
|
qiniu: qiniu,
|
|
tencent: tencent,
|
|
ossConfig: sysConfig.OSS,
|
|
}, nil
|
|
}
|
|
|
|
func (m *UploaderManager) GetUploadHandler() Uploader {
|
|
switch m.active {
|
|
case Local:
|
|
return m.local
|
|
case AliYun:
|
|
return m.aliyun
|
|
case Minio:
|
|
return m.mini
|
|
case QiNiu:
|
|
return m.qiniu
|
|
case Tencent:
|
|
return m.tencent
|
|
}
|
|
return m.local
|
|
}
|
|
|
|
func (m *UploaderManager) UpdateConfig(config types.OSSConfig) {
|
|
switch config.Active {
|
|
case Local:
|
|
m.local.UpdateConfig(config.Local)
|
|
case AliYun:
|
|
m.aliyun.UpdateConfig(config.AliYun)
|
|
case Minio:
|
|
m.mini.UpdateConfig(config.Minio)
|
|
case QiNiu:
|
|
m.qiniu.UpdateConfig(config.QiNiu)
|
|
case Tencent:
|
|
m.tencent.UpdateConfig(config.Tencent)
|
|
}
|
|
m.active = config.Active
|
|
m.ossConfig = config
|
|
}
|
|
|
|
// GetThumbURL 根据原始图片URL和尺寸生成缩略图URL
|
|
// 如果模板为空,使用默认模板(本地存储格式)
|
|
// 如果明确设置为空字符串(表示不支持缩略图),返回原图URL
|
|
func (m *UploaderManager) GetThumbURL(originalURL string, width, height int) string {
|
|
var template string
|
|
|
|
// 根据当前激活的存储引擎获取对应的模板
|
|
switch m.active {
|
|
case Local:
|
|
template = m.ossConfig.Local.ThumbTemplate
|
|
case AliYun:
|
|
template = m.ossConfig.AliYun.ThumbTemplate
|
|
case Minio:
|
|
template = m.ossConfig.Minio.ThumbTemplate
|
|
case QiNiu:
|
|
template = m.ossConfig.QiNiu.ThumbTemplate
|
|
case Tencent:
|
|
template = m.ossConfig.Tencent.ThumbTemplate
|
|
default:
|
|
template = m.ossConfig.Local.ThumbTemplate
|
|
}
|
|
|
|
// 如果模板为空,使用默认模板(兼容旧配置)
|
|
if template == "" {
|
|
template = DefaultThumbTemplate
|
|
}
|
|
|
|
// 替换变量
|
|
thumbURL := strings.ReplaceAll(template, "{width}", fmt.Sprintf("%d", width))
|
|
thumbURL = strings.ReplaceAll(thumbURL, "{height}", fmt.Sprintf("%d", height))
|
|
|
|
// 拼接原始URL和缩略图参数
|
|
return originalURL + thumbURL
|
|
}
|
|
|
|
// GetThumbTemplate 获取当前存储引擎的缩略图模板
|
|
func (m *UploaderManager) GetThumbTemplate() string {
|
|
var template string
|
|
|
|
switch m.active {
|
|
case Local:
|
|
template = m.ossConfig.Local.ThumbTemplate
|
|
case AliYun:
|
|
template = m.ossConfig.AliYun.ThumbTemplate
|
|
case Minio:
|
|
template = m.ossConfig.Minio.ThumbTemplate
|
|
case QiNiu:
|
|
template = m.ossConfig.QiNiu.ThumbTemplate
|
|
case Tencent:
|
|
template = m.ossConfig.Tencent.ThumbTemplate
|
|
default:
|
|
template = m.ossConfig.Local.ThumbTemplate
|
|
}
|
|
|
|
// 如果模板为空,返回默认模板
|
|
if template == "" {
|
|
return DefaultThumbTemplate
|
|
}
|
|
|
|
return template
|
|
}
|