2025-08-07 18:12:29 +01:00

76 lines
1.9 KiB
Go

package handlers
import (
"io"
"os"
"github.com/labstack/echo/v4"
)
type FileInfo struct {
FileName string `json:"fileName"`
FileSize int64 `json:"fileSize"`
FileType string `json:"fileType"`
FileURL string `json:"fileURL"`
}
func RootHandler(c echo.Context) error {
return c.JSON(200, map[string]string{
"status": "😺",
"docs": "https://illfillthisoutlater.com",
})
}
func UploadHandler(c echo.Context) error {
file, err := c.FormFile("file")
if err != nil {
c.Logger().Errorf("Error retrieving file from request: %v", err)
return c.JSON(400, map[string]string{"error": "Failed to retrieve file"})
}
if file == nil {
c.Logger().Error("No file provided in the request")
return c.JSON(400, map[string]string{"error": "No file provided"})
}
src, err := file.Open()
if err != nil {
c.Logger().Errorf("Error opening uploaded file: %v", err)
return c.JSON(500, map[string]string{"error": "Failed to open file"})
}
defer src.Close()
fileName := file.Filename
fileSize := file.Size
fileType := file.Header.Get("Content-Type")
c.Logger().Infof("Received file: %s, Size: %d bytes, Type: %s", fileName, fileSize, fileType)
err = os.MkdirAll("uploads", 0o755)
if err != nil {
c.Logger().Errorf("Error creating uploads directory: %v", err)
return c.JSON(500, map[string]string{"error": "Failed to create upload directory"})
}
dst, err := os.Create("uploads/" + fileName)
if err != nil {
c.Logger().Errorf("Error creating file on server: %v", err)
return c.JSON(500, map[string]string{"error": "Failed to save file"})
}
defer dst.Close()
if _, err := io.Copy(dst, src); err != nil {
c.Logger().Errorf("Error saving uploaded file: %v", err)
return c.JSON(500, map[string]string{"error": "Failed to save file"})
}
fileURL := "http://localhost:8080/uploads/" + fileName
return c.JSON(200, FileInfo{
FileName: fileName,
FileSize: fileSize,
FileType: fileType,
FileURL: fileURL,
})
}