77 lines
1.9 KiB
Go
77 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",
|
|
})
|
|
}
|
|
|
|
// UploadHandler e.POST("/upload")
|
|
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,
|
|
})
|
|
}
|