提交
This commit is contained in:
@@ -10,6 +10,11 @@ import (
|
||||
var engines = make(map[string]Engine)
|
||||
var policyEngines = make(map[uint64]Engine)
|
||||
|
||||
// InvalidateEngine 清除指定策略的引擎缓存, 下次访问时重新创建
|
||||
func InvalidateEngine(policyID uint64) {
|
||||
delete(policyEngines, policyID)
|
||||
}
|
||||
|
||||
func Register(policyType string, engine Engine) {
|
||||
engines[policyType] = engine
|
||||
}
|
||||
@@ -18,14 +23,41 @@ func GetEngine(policy *model.StoragePolicy) (Engine, error) {
|
||||
if engine, ok := policyEngines[policy.ID]; ok {
|
||||
return engine, nil
|
||||
}
|
||||
engine, ok := engines[policy.Type]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("不支持的存储类型: %s", policy.Type)
|
||||
}
|
||||
if policy.Type == "local" && policy.Config.BasePath != "" {
|
||||
|
||||
// 根据策略类型创建引擎
|
||||
var engine Engine
|
||||
var err error
|
||||
|
||||
switch policy.Type {
|
||||
case "local":
|
||||
cfg := config.AppConfig.Storage
|
||||
engine = NewLocalEngineWithCDN(policy.Config.BasePath, cfg.CDNHost, cfg.CDNPathPrefix)
|
||||
basePath := cfg.LocalBasePath
|
||||
if policy.Config.BasePath != "" {
|
||||
basePath = policy.Config.BasePath
|
||||
}
|
||||
engine = NewLocalEngineWithCDN(basePath, cfg.CDNHost, cfg.CDNPathPrefix)
|
||||
|
||||
case "minio":
|
||||
engine, err = NewMinIOEngine(
|
||||
policy.Config.Endpoint,
|
||||
policy.Config.AccessKey,
|
||||
policy.Config.SecretKey,
|
||||
policy.Config.Bucket,
|
||||
policy.Config.UseSSL,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("创建MinIO引擎失败: %w", err)
|
||||
}
|
||||
|
||||
default:
|
||||
// 尝试从 engines map 获取(兼容旧注册方式)
|
||||
var ok bool
|
||||
engine, ok = engines[policy.Type]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("不支持的存储类型: %s", policy.Type)
|
||||
}
|
||||
}
|
||||
|
||||
policyEngines[policy.ID] = engine
|
||||
return engine, nil
|
||||
}
|
||||
|
||||
@@ -102,6 +102,11 @@ func (e *LocalEngine) GetURL(storageKey string) string {
|
||||
return "/storage/" + storageKey
|
||||
}
|
||||
|
||||
// GetFullPath 获取文件在磁盘上的完整路径
|
||||
func (e *LocalEngine) GetFullPath(storageKey string) string {
|
||||
return filepath.Join(e.BasePath, storageKey)
|
||||
}
|
||||
|
||||
// GenerateStorageKey 生成存储路径
|
||||
func GenerateStorageKey(md5, extension string) string {
|
||||
now := time.Now()
|
||||
|
||||
Reference in New Issue
Block a user