feat(worker): add image conversion functionality and support for WEBP format in image compression

This commit is contained in:
keven1024
2026-02-27 14:32:42 +08:00
parent e5b5def6f0
commit bde4e36e47
2 changed files with 49 additions and 2 deletions

View File

@@ -2,6 +2,7 @@ package services
import (
"errors"
u "pkg/utils"
"worker/internal/utils"
"github.com/samber/lo"
@@ -26,7 +27,7 @@ func CompressImage(filePath string, mimeType string) (string, error) {
return "", err
}
case "image/jpeg":
err := utils.CopyFile(filePath, compressedPath)
err := u.CopyFile(filePath, compressedPath)
if err != nil {
return "", err
}

View File

@@ -7,8 +7,8 @@ import (
"mime"
"path/filepath"
"pkg/models"
"pkg/utils"
"worker/internal/services"
"worker/internal/utils"
"github.com/hibiken/asynq"
)
@@ -55,6 +55,52 @@ func CompressImage(ctx context.Context, task *asynq.Task) error {
return nil
}
func ConvertImage(ctx context.Context, task *asynq.Task) error {
var payload ConvertImageTaskPayload
if err := json.Unmarshal(task.Payload(), &payload); err != nil {
return err
}
originalFileInfo, _ := models.GetRedisFileInfo(payload.FileId)
if originalFileInfo == nil || originalFileInfo.FileType != models.FileTypeUpload {
return errors.New("文件不存在")
}
uploadPath, err := utils.GetUploadDirPath()
if err != nil {
return err
}
originalPath := filepath.Join(uploadPath, payload.FileId)
convertedPath, err := services.ConvertImageWithMagick(originalPath, originalFileInfo.MimeType, payload.TargetExt)
if err != nil {
return err
}
mimeType := mime.TypeByExtension(payload.TargetExt)
if mimeType == "" {
return ErrUnknown
}
convertedFileInfo, err := services.GenStandardFile(convertedPath, mimeType)
if err != nil {
return err
}
models.SetRedisTaskInfo(task.ResultWriter().TaskID(), map[string]any{
"status": "success",
"result": []any{
map[string]any{
"old_file": map[string]any{
"id": payload.FileId,
"size": originalFileInfo.FileSize,
},
"new_file": map[string]any{
"id": convertedFileInfo.FileId,
"size": convertedFileInfo.FileSize,
},
},
},
})
return nil
}
func UpscaleImage(ctx context.Context, task *asynq.Task) error {
return nil
}