Hub-Api/services/upload.go

56 lines
1.1 KiB
Go

package services
import (
"io"
"net/http"
"os"
"github.com/labstack/echo/v4"
)
func Upload(c echo.Context) error {
file, err := c.FormFile("file")
if err != nil {
return err
}
src, err := file.Open()
if err != nil {
return err
}
defer src.Close()
// Read the file header to determine the MIME type
buff := make([]byte, 512)
if _, err := src.Read(buff); err != nil {
return err
}
filetype := http.DetectContentType(buff)
// Verify if the file is a ZIP file
if filetype != "application/zip" && filetype != "application/x-zip-compressed" {
return c.JSON(http.StatusBadRequest, map[string]string{
"error": "The uploaded file is not a ZIP file",
})
}
// Reset the file pointer to the beginning
if _, err := src.Seek(0, io.SeekStart); err != nil {
return err
}
// Destination
dst, err := os.Create("./uploads/" + file.Filename)
if err != nil {
return err
}
if _, err = io.Copy(dst, src); err != nil {
return err
}
return c.JSON(http.StatusOK, map[string]string{
"message": "File uploaded successfully",
})
}