Upload di files in Fiber

Mattepuffo's logo
Upload di files in Fiber

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!


Condividi

Commentami!