From 318fa30d3c1f1f3341bb9fe4c0c56d8e43a35d1b Mon Sep 17 00:00:00 2001 From: Keiran Date: Thu, 7 Aug 2025 02:58:38 +0100 Subject: [PATCH] :3 --- .gitignore | 1 + cmd/termcloud/main.go | 1 + internal/handlers/handlers.go | 38 ++++++++++++++++++++++++++++++++++- 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 378eac2..d545b7a 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ build +uploads diff --git a/cmd/termcloud/main.go b/cmd/termcloud/main.go index a4603d1..c369eaa 100644 --- a/cmd/termcloud/main.go +++ b/cmd/termcloud/main.go @@ -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) diff --git a/internal/handlers/handlers.go b/internal/handlers/handlers.go index 8fe6ee8..6ad6fbe 100644 --- a/internal/handlers/handlers.go +++ b/internal/handlers/handlers.go @@ -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, }) }