This commit is contained in:
Keiran 2025-08-07 02:58:38 +01:00
parent e90640ce6a
commit 318fa30d3c
3 changed files with 39 additions and 1 deletions

1
.gitignore vendored
View File

@ -1 +1,2 @@
build
uploads

View File

@ -19,6 +19,7 @@ func main() {
Level: 5,
}))
e.Use(middleware.RateLimiter(middleware.NewRateLimiterMemoryStore(rate.Limit(20))))
e.Static("/uploads", "uploads")
e.GET("/", handlers.RootHandler)
e.POST("/upload", handlers.UploadHandler)

View File

@ -1,11 +1,17 @@
package handlers
import "github.com/labstack/echo/v4"
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 {
@ -20,21 +26,51 @@ 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,
})
}