mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-10-08 00:26:37 +08:00
refactor(storage): update Backend.Put to return PutResult and encapsulate bucket mapping
- Update Backend.Put method signature in storage.go to return (PutResult, error). - Adjust all backend implementations (local, oss, s3, webdav) to return a PutResult enclosing Key and Bucket. - Refactor storeUploadFile in upload routers.go to extract key/bucket from PutResult, eliminating manual config bucket lookups. - Remove the unused cfgBucket helper from storage_ops.go. - Adjust storage_migration_task.go and tests to accommodate the updated method signature.
This commit is contained in:
@@ -404,22 +404,13 @@ func storeUploadFile(ctx context.Context, subPath string, size int64, mimeType s
|
||||
logger.ErrorF(ctx, "初始化活动存储失败: %v", err)
|
||||
return "", "", ErrSaveFileFailed
|
||||
}
|
||||
storedPath, err := backend.Put(ctx, subPath, bytes.NewReader(buf.Bytes()), size, mimeType)
|
||||
result, err := backend.Put(ctx, subPath, bytes.NewReader(buf.Bytes()), size, mimeType)
|
||||
if err != nil {
|
||||
logger.ErrorF(ctx, "写入 %s 存储失败: %v", driver, err)
|
||||
return "", "", ErrSaveFileFailed
|
||||
}
|
||||
switch driver {
|
||||
case storage.DriverS3:
|
||||
meta.Bucket = cfgBucket(ctx, driver)
|
||||
case storage.DriverR2:
|
||||
meta.Bucket = cfgBucket(ctx, driver)
|
||||
case storage.DriverMinIO:
|
||||
meta.Bucket = cfgBucket(ctx, driver)
|
||||
case storage.DriverOSS:
|
||||
meta.Bucket = cfgBucket(ctx, driver)
|
||||
}
|
||||
return string(driver), storedPath, ""
|
||||
meta.Bucket = result.Bucket
|
||||
return string(driver), result.Key, ""
|
||||
}
|
||||
|
||||
// isImageExtension 判断文件扩展名是否属于常见图片格式
|
||||
|
||||
@@ -287,7 +287,7 @@ func migrateObjects(
|
||||
}
|
||||
return fmt.Errorf("open source object %q: %w", obj.FilePath, err)
|
||||
}
|
||||
targetPath, putErr := targetBackend.Put(ctx, obj.FilePath, source.Body, obj.FileSize, obj.MimeType)
|
||||
targetResult, putErr := targetBackend.Put(ctx, obj.FilePath, source.Body, obj.FileSize, obj.MimeType)
|
||||
closeErr := source.Body.Close()
|
||||
if putErr != nil {
|
||||
return fmt.Errorf("copy object %q: %w", obj.FilePath, putErr)
|
||||
@@ -298,7 +298,7 @@ func migrateObjects(
|
||||
|
||||
// Data integrity check (SHA-256 hash verification)
|
||||
if len(obj.Hash) == sha256HexLength {
|
||||
targetObj, getErr := targetBackend.Get(ctx, targetPath)
|
||||
targetObj, getErr := targetBackend.Get(ctx, targetResult.Key)
|
||||
if getErr != nil {
|
||||
return fmt.Errorf("retrieve target object for verification %q: %w", obj.FilePath, getErr)
|
||||
}
|
||||
@@ -318,7 +318,7 @@ func migrateObjects(
|
||||
Where("storage_driver = ? AND file_path = ?", sourceDriver, obj.FilePath).
|
||||
Updates(map[string]any{
|
||||
"storage_driver": targetDriver,
|
||||
"file_path": targetPath,
|
||||
"file_path": targetResult.Key,
|
||||
}).Error; err != nil {
|
||||
return fmt.Errorf("update migrated object %q: %w", obj.FilePath, err)
|
||||
}
|
||||
|
||||
@@ -67,21 +67,4 @@ func currentMigrationTargetConfig(ctx context.Context) (storage.Config, bool, er
|
||||
return target, true, nil
|
||||
}
|
||||
|
||||
func cfgBucket(ctx context.Context, driver storage.Driver) string {
|
||||
cfg, err := storage.LoadConfig(ctx)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
switch driver {
|
||||
case storage.DriverS3:
|
||||
return cfg.S3.Bucket
|
||||
case storage.DriverR2:
|
||||
return cfg.R2.Bucket
|
||||
case storage.DriverMinIO:
|
||||
return cfg.MinIO.Bucket
|
||||
case storage.DriverOSS:
|
||||
return cfg.OSS.Bucket
|
||||
default:
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user