In questo articolo, vedremo come implementare l'upload di file multipli in un'applicazione web sviluppata con il linguaggio Go. Questo approccio è utile per gestire l'upload di più file contemporaneamente, ad esempio immagini o documenti, da parte degli utenti.
Implementazione
Creiamo un'applicazione Go che permette agli utenti di caricare più file.
1. Configurare il Server HTTP
Creiamo un file main.go
e configuriamo un server HTTP per gestire le richieste di upload.
package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
http.HandleFunc("/upload", uploadHandler)
http.HandleFunc("/", formHandler)
fmt.Println("Server in ascolto sulla porta 8080...")
http.ListenAndServe(":8080", nil)
}
2. Creare il Form HTML
Il modulo HTML consente agli utenti di selezionare più file e inviarli al server.
func formHandler(w http.ResponseWriter, r *http.Request) {
html := `
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Upload File Multipli</title>
</head>
<body>
<h1>Carica i tuoi file</h1>
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="files" multiple>
<br><br>
<button type="submit">Carica</button>
</form>
</body>
</html>
`
w.Write([]byte(html))
}
3. Gestire l'Upload dei File
Creiamo un handler che processa i file inviati dal modulo HTML.
func uploadHandler(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
http.Error(w, "Metodo non consentito", http.StatusMethodNotAllowed)
return
}
r.ParseMultipartForm(10 << 20) // Limite di 10 MB
files := r.MultipartForm.File["files"]
for _, fileHeader := range files {
file, err := fileHeader.Open()
if err != nil {
http.Error(w, "Errore durante l'apertura del file", http.StatusInternalServerError)
return
}
defer file.Close()
out, err := os.Create("uploads/" + fileHeader.Filename)
if err != nil {
http.Error(w, "Errore durante la creazione del file", http.StatusInternalServerError)
return
}
defer out.Close()
_, err = io.Copy(out, file)
if err != nil {
http.Error(w, "Errore durante la scrittura del file", http.StatusInternalServerError)
return
}
}
w.Write([]byte("Upload completato!"))
}
Testare l'Applicazione
Avviare l'applicazione eseguendo il comando:
go run main.go
Accedere al modulo di upload all'indirizzo http://localhost:8080
e testare l'upload di più file.
Conclusione
Abbiamo visto come implementare l'upload di file multipli con Go utilizzando un modulo HTML e un server HTTP. Questo approccio può essere personalizzato per soddisfare le esigenze specifiche della tua applicazione.