:3
This commit is contained in:
parent
e90640ce6a
commit
318fa30d3c
1
.gitignore
vendored
1
.gitignore
vendored
@ -1 +1,2 @@
|
||||
build
|
||||
uploads
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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,
|
||||
})
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user