Upload di files in Fiber
In Fiber possiamo facilmente creare delle rotte per l'upload di uno o più files.
In questo articolo vi presento un codice con entrambe le opzioni.
Sorvolo l'installazione di base che ormai dovreste conoscerla.
Qui sotto il codice:
package main
import (
"fmt"
"os"
"path/filepath"
"github.com/gofiber/fiber/v2"
)
func main() {
app := fiber.New()
uploadDir := "./UPLOADS"
if err := os.MkdirAll(uploadDir, os.ModePerm); err != nil {
fmt.Println(err)
}
app.Post("/upload", func(c *fiber.Ctx) error {
fileHeader, err := c.FormFile("file")
if err != nil {
return c.Status(400).SendString("File non presente nella richiesta")
}
savePath := filepath.Join(uploadDir, fileHeader.Filename)
if err := c.SaveFile(fileHeader, savePath); err != nil {
return c.Status(500).SendString("Errore nel salvataggio del file: " + err.Error())
}
return c.SendString(fmt.Sprintf("✅ File %s caricato con successo!", fileHeader.Filename))
})
app.Post("/upload/multipli", func(c *fiber.Ctx) error {
form, err := c.MultipartForm()
if err != nil {
return c.Status(400).SendString("Errore nella lettura del form multipart")
}
files := form.File["files"]
if len(files) == 0 {
return c.Status(400).SendString("Nessun file trovato nel campo 'files'")
}
var uploaded []string
for _, file := range files {
savePath := filepath.Join(uploadDir, file.Filename)
if err := c.SaveFile(file, savePath); err != nil {
return c.Status(500).SendString("Errore nel salvataggio del file: " + err.Error())
}
uploaded = append(uploaded, file.Filename)
}
return c.JSON(fiber.Map{
"message": "✅ File caricati con successo!",
"files": uploaded,
"count": len(uploaded),
"savePath": uploadDir,
})
})
app.Listen(":3000")
}
La directory di uploads verrà creata in automatico se non esiste.
Enjoy!
go fiber upload
Commentami!