mirror of
https://github.com/keven1024/015.git
synced 2026-05-26 15:13:30 +00:00
feat(worker): add image conversion functionality and support for WEBP format in image compression
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user