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:
ryan
2026-06-13 15:48:41 +08:00
parent ce9423f877
commit 1d37242a8b
9 changed files with 37 additions and 57 deletions
+3 -12
View File
@@ -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)
}
+1 -18
View File
@@ -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 ""
}
}