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, }) }