:3
This commit is contained in:
parent
e90640ce6a
commit
318fa30d3c
1
.gitignore
vendored
1
.gitignore
vendored
@ -1 +1,2 @@
|
|||||||
build
|
build
|
||||||
|
uploads
|
||||||
|
|||||||
@ -19,6 +19,7 @@ func main() {
|
|||||||
Level: 5,
|
Level: 5,
|
||||||
}))
|
}))
|
||||||
e.Use(middleware.RateLimiter(middleware.NewRateLimiterMemoryStore(rate.Limit(20))))
|
e.Use(middleware.RateLimiter(middleware.NewRateLimiterMemoryStore(rate.Limit(20))))
|
||||||
|
e.Static("/uploads", "uploads")
|
||||||
|
|
||||||
e.GET("/", handlers.RootHandler)
|
e.GET("/", handlers.RootHandler)
|
||||||
e.POST("/upload", handlers.UploadHandler)
|
e.POST("/upload", handlers.UploadHandler)
|
||||||
|
|||||||
@ -1,11 +1,17 @@
|
|||||||
package handlers
|
package handlers
|
||||||
|
|
||||||
import "github.com/labstack/echo/v4"
|
import (
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/labstack/echo/v4"
|
||||||
|
)
|
||||||
|
|
||||||
type FileInfo struct {
|
type FileInfo struct {
|
||||||
FileName string `json:"fileName"`
|
FileName string `json:"fileName"`
|
||||||
FileSize int64 `json:"fileSize"`
|
FileSize int64 `json:"fileSize"`
|
||||||
FileType string `json:"fileType"`
|
FileType string `json:"fileType"`
|
||||||
|
FileURL string `json:"fileURL"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func RootHandler(c echo.Context) error {
|
func RootHandler(c echo.Context) error {
|
||||||
@ -20,21 +26,51 @@ func UploadHandler(c echo.Context) error {
|
|||||||
file, err := c.FormFile("file")
|
file, err := c.FormFile("file")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Logger().Errorf("Error retrieving file from request: %v", err)
|
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 {
|
if file == nil {
|
||||||
c.Logger().Error("No file provided in the request")
|
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
|
fileName := file.Filename
|
||||||
fileSize := file.Size
|
fileSize := file.Size
|
||||||
fileType := file.Header.Get("Content-Type")
|
fileType := file.Header.Get("Content-Type")
|
||||||
|
|
||||||
c.Logger().Infof("Received file: %s, Size: %d bytes, Type: %s", fileName, fileSize, fileType)
|
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{
|
return c.JSON(200, FileInfo{
|
||||||
FileName: fileName,
|
FileName: fileName,
|
||||||
FileSize: fileSize,
|
FileSize: fileSize,
|
||||||
FileType: fileType,
|
FileType: fileType,
|
||||||
|
FileURL: fileURL,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user