ho i modelli GO (upload.tmpl.html
) come questo:E 'possibile associare un canale golang in un modello
un gestore uploadHandler.go
con
func UploadHandler(c *gin.Context) {
file, header, err := c.Request.FormFile("file-upload")
if err != nil {
log.Fatal("Erreur dans la récupération de fichier")
}
//...
fileName := make(chan string)
go ReadCsvFile(bytes, fileName)
go func() {
for {
log.Info(<-fileName)
}
}()
c.HTML(http.StatusOK, "upload.tmpl.html", gin.H{
"fileName": <-fileName,
})
}
e il metodo ReadCsvFile()
così:
func ReadCsvFile(bytesCSV []byte, fileName chan string) {
r := bytes.NewReader(bytesCSV)
reader := csv.NewReader(r)
reader.Comma = ';'
records, err := reader.ReadAll()
if err != nil {
fmt.Println("Error:", err)
return
}
db, _ := databaseApp.OpenDatabase()
defer db.Close()
for _, record := range records {
fileName <- record[0]
product := &em.Product{
Name: record[0],
//...
}
db.Create(product)
}
fileName <- "done"
}
Provo a visualizzare il file correnteNome o f ogni riga nel modello, ma è possibile associare il canale al modello in questo modo? Perché in questo modo la pagina non viene più caricata.
dopo il rendering tutto puoi fare "aggiornare" la pagina usando ajax/js – dit