mirror of
https://codeberg.org/PLG-Development/PLG-MuDiCS
synced 2026-07-05 16:37:09 +00:00
refactor(display): more scalable file preview file type routing
This commit is contained in:
@@ -4,6 +4,9 @@ import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"fmt"
|
||||
"image"
|
||||
"image/jpeg"
|
||||
"image/png"
|
||||
"log/slog"
|
||||
"net"
|
||||
"os"
|
||||
@@ -178,3 +181,30 @@ func ResolveStorageFilePath(pathParam string) (string, bool, error) {
|
||||
|
||||
return fullPath, true, nil
|
||||
}
|
||||
|
||||
func PreviewFile(fullPath string) (image.Image, error) {
|
||||
var err error
|
||||
|
||||
f, err := os.Open(fullPath)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
ext := strings.ToLower(filepath.Ext(fullPath))
|
||||
var img image.Image
|
||||
switch ext {
|
||||
case ".jpg", ".jpeg":
|
||||
img, err = jpeg.Decode(f)
|
||||
case ".png":
|
||||
img, err = png.Decode(f)
|
||||
default:
|
||||
return nil, fmt.Errorf("unsupported file type for preview: %s", ext)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
preview := resizeImage(img, 200, 200)
|
||||
return preview, nil
|
||||
}
|
||||
|
||||
+4
-22
@@ -4,8 +4,6 @@ import (
|
||||
"bytes"
|
||||
"context"
|
||||
"fmt"
|
||||
"image"
|
||||
"image/jpeg"
|
||||
"image/png"
|
||||
"io"
|
||||
"log/slog"
|
||||
@@ -327,34 +325,18 @@ func previewRoute(ctx echo.Context) error {
|
||||
return ctx.JSON(http.StatusNotFound, ErrorResponse{Error: "File not found"})
|
||||
}
|
||||
|
||||
f, err := os.Open(fullPath)
|
||||
resized, err := pkg.PreviewFile(fullPath)
|
||||
if err != nil {
|
||||
slog.Error("Failed to open file", "file", fullPath, "error", err)
|
||||
return ctx.JSON(http.StatusInternalServerError, ErrorResponse{Error: "Failed to open file"})
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
ext := strings.ToLower(filepath.Ext(fullPath))
|
||||
var imgData image.Image
|
||||
switch ext {
|
||||
case ".jpg", ".jpeg":
|
||||
imgData, err = jpeg.Decode(f)
|
||||
case ".png":
|
||||
imgData, err = png.Decode(f)
|
||||
default:
|
||||
return ctx.JSON(http.StatusBadRequest, ErrorResponse{Error: "Unsupported image format for preview"})
|
||||
}
|
||||
if err != nil {
|
||||
slog.Error("Failed to decode image", "error", err)
|
||||
return ctx.JSON(http.StatusInternalServerError, ErrorResponse{Error: "Failed to decode image"})
|
||||
slog.Error("Failed to generate preview", "file", fullPath, "error", err)
|
||||
return ctx.JSON(http.StatusInternalServerError, ErrorResponse{Error: "Failed to generate preview"})
|
||||
}
|
||||
|
||||
resized := pkg.ResizeImage(imgData, 100, 100)
|
||||
var buf bytes.Buffer
|
||||
if err := png.Encode(&buf, resized); err != nil {
|
||||
slog.Error("Failed to encode image", "error", err)
|
||||
return ctx.JSON(http.StatusInternalServerError, ErrorResponse{Error: "Failed to encode image"})
|
||||
}
|
||||
|
||||
return ctx.Blob(http.StatusOK, "image/png", buf.Bytes())
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user