Gambas-it

Gambas3 => Domande tecniche => Topic aperto da: milio - 04 Agosto 2022, 17:01:56

Titolo: [RISOLTO] Inviare file con gb.web.gui
Inserito da: milio - 04 Agosto 2022, 17:01:56
Ciao a tutti. E' da poco che utilizzo questo interessante componente che ti permette di creare applicazioni web CGI.
Sto utilizzando come modello i sorgenti del programma WebDemo che si trova sulla software farm di gambas, ho creato dei report consultabili via web all'interno dell'azienda ed ora volevo inviare il contenuto della tabella del report, sotto forma di un file csv al client collegato ma non riesco a trovare il modo di farlo.
Qualcuno ha qualche idea?
Titolo: Re:Inviare file con gb.web.gui
Inserito da: Gianluigi - 04 Agosto 2022, 18:31:00
Ciao a tutti. E' da poco che utilizzo questo interessante componente che ti permette di creare applicazioni web CGI.
Sto utilizzando come modello i sorgenti del programma WebDemo che si trova sulla software farm di gambas, ho creato dei report consultabili via web all'interno dell'azienda ed ora volevo inviare il contenuto della tabella del report, sotto forma di un file csv al client collegato ma non riesco a trovare il modo di farlo.
Qualcuno ha qualche idea?

Qualcosa ho fatto, ma ora sto uscendo...
Domani ti rispondo

Ciao e scusa
Titolo: Re:Inviare file con gb.web.gui
Inserito da: milio - 04 Agosto 2022, 19:50:12
Qualcosa ho fatto, ma ora sto uscendo...
Domani ti rispondo

Ciao e scusa

Scusa di che, anzi sono io che devo scusarmi, avrei dovuto esserci gia' arrivato....  :hatecomputer:

Ho provato con
Codice: [Seleziona]
Response.SendFile(Path As String [ , ContentType As String ])
ma probabilmente non serve allo scopo....
Titolo: Re:Inviare file con gb.web.gui
Inserito da: Gianluigi - 05 Agosto 2022, 10:40:29
E invece mi scuso nuovamente  :-[
Non riesco a trovare il piccolo lavoro che avevo fatto sotto le direttive di Lee.
Comunque, se ricordo bene, era basato su questi esempi e l'uso di post (gb.net.curl), ma non sono sicuro.
Come avrai capito di server ci mastico poco...
Purtroppo gb.web.gui ha bisogno di javascript che non è nella mia conoscenza.

Qui c'è una discussione che spero possa aiutarti:
https://lists.gambas-basic.org/pipermail/user/2022-June/076211.html

Importante:
Posso chiedere aiuto sia al prof. Hans Lehmann autore del libro tedesco su Gambas che allo stesso Lee che a volte insieme al sottoscritto collabora col professore.

Per farlo avrei bisogno di un piccolo esempio esplicativo, qualcosa di essenziale che possa aiutare loro a comprendere il problema.
Titolo: Re:Inviare file con gb.web.gui
Inserito da: Gianluigi - 05 Agosto 2022, 14:19:05
Seguendo il suggerimento di vuott, giusto per aiutare chi non sa di cosa si parla, metto il link a dei filmati di lezioni spagnole postati da Alessandri Guzman che riguardano l'antenato di gb.web.gui e cioè gb.web.form che pur essendo obsoleto e deprecato può aiutare nello studio del componente.

https://www.youtube.com/channel/UCEdI19J6sWOfZe_cdEE7U7g
Titolo: Re:Inviare file con gb.web.gui
Inserito da: milio - 06 Agosto 2022, 11:57:24
Allora ravanando un poco su internet ho trovato che si dovenva aggiungere
Codice: [Seleziona]
Response.AddHeader("Content-Disposition", "attachment;filename=\"data.csv\"")

Codice: [Seleziona]
Public Sub Main()

  Dim Nx As Integer
  Dim Nx2 As Integer
  Dim s, r As String
  Dim sPath As String

  For Nx = 0 To 10
    For Nx2 = 0 To 10
      s &= Nx2 & ";"
    Next
    r &= Left(s, -1) & "\n"
    s = ""
  Next

  sPath = Temp() & ".csv"

  File.Save(sPath, r)

  Response.AddHeader("Content-Disposition", "attachment;filename=\"data.csv\"")

  Response.SendFile(sPath, "text/plain")

End

Il problema rimane per i fatto che se lancio questo codice 'da solo' il browser di fatto mi scarica l'allegato con nome dati.csv.
Se il codice lo faccio partire da un form e' come se la pagina sul browser rimanesse in perenne attesa e non scarica nulla....
Titolo: Re:Inviare file con gb.web.gui
Inserito da: milio - 06 Agosto 2022, 14:46:41
Allego esempio per eventuali test....
Titolo: Re:Inviare file con gb.web.gui
Inserito da: Gianluigi - 06 Agosto 2022, 15:32:57
Ok lo invio ad Hans e ti faccio sapere
Titolo: Re:Inviare file con gb.web.gui
Inserito da: Gianluigi - 06 Agosto 2022, 18:26:41
Allego esempio per eventuali test....

Mi scuso ho avuto (spero) dei problemi col firmware e solo ora ho dato un occhio.

Io i file inviati alla cartella tmp li vedo, quindi, cosa deve succedere?

 :ciao:
Titolo: Re:Inviare file con gb.web.gui
Inserito da: milio - 06 Agosto 2022, 23:11:32
Da browser dovrebbe vedersi un tasto con scritto CSV giusto?
Il file nella cartella temp è il server che lo genera e da browser si dovrebbe vedere iniziare lo scaricamento e relativo salvataggio nella cartella di download.
Titolo: Re:Inviare file con gb.web.gui
Inserito da: Gianluigi - 06 Agosto 2022, 23:51:21
Da browser dovrebbe vedersi un tasto con scritto CSV giusto?
Si, corretto
Citazione
Il file nella cartella temp è il server che lo genera e da browser si dovrebbe vedere iniziare lo scaricamento e relativo salvataggio nella cartella di download.

No, questo non succede

Sono fuso vado a dormire, domani a mente fredda ci ragiono, buonanotte.
Titolo: Re:Inviare file con gb.web.gui
Inserito da: Gianluigi - 08 Agosto 2022, 10:16:54
Da browser dovrebbe vedersi un tasto con scritto CSV giusto?
Il file nella cartella temp è il server che lo genera e da browser si dovrebbe vedere iniziare lo scaricamento e relativo salvataggio nella cartella di download.

Ho chiesto sulla ML e ho ricevuto questa risposta interessante da Safiur Rahman:
https://lists.gambas-basic.org/pipermail/user/2022-August/076683.html

Invece qui Lee, rivolgendosi a Minisini, parla di un possibile bug:
https://lists.gambas-basic.org/pipermail/user/2022-August/076682.html
Titolo: Re:Inviare file con gb.web.gui
Inserito da: milio - 08 Agosto 2022, 15:12:40
Testo subito il suggerimento di Rahman aspettando la risposta di Benoit....

Grazie ancora Gianluigi  :ok:
Titolo: Re:Inviare file con gb.web.gui
Inserito da: milio - 08 Agosto 2022, 19:47:33
Allora applicando il suggerimento di Rahman e lanciando la procedura da webform la pagina nel browser si frizza.
Lanciandolo direttamente da un modulo di avvio (quindi non viene generato una pagina web ma direttamente il file e il comando per scaricarlo) il mio server apache mi da questo errore:

Codice: [Seleziona]
[Mon Aug 08 19:43:48.918779 2022] [cgid:error] [pid 1089:tid 140609880831744] [client ::1:42238] End of script output before headers: WebDemo.gambas
Titolo: Re:Inviare file con gb.web.gui
Inserito da: Gianluigi - 09 Agosto 2022, 09:46:52
Allora applicando il suggerimento di Rahman e lanciando la procedura da webform la pagina nel browser si frizza.
Lanciandolo direttamente da un modulo di avvio (quindi non viene generato una pagina web ma direttamente il file e il comando per scaricarlo) il mio server apache mi da questo errore:

Codice: [Seleziona]
[Mon Aug 08 19:43:48.918779 2022] [cgid:error] [pid 1089:tid 140609880831744] [client ::1:42238] End of script output before headers: WebDemo.gambas

Safiur ha risposto con questo esempio che funziona bene, a me sembra o forse no?(prima occorre creare le cartelle come da suggerimento iniziale)
qui il collegamento alla risposta:
https://lists.gambas-basic.org/pipermail/user/2022-August/076688.html

Qui lo scambio fra Benoit e Lee:
https://lists.gambas-basic.org/pipermail/user/2022-August/076686.html
https://lists.gambas-basic.org/pipermail/user/2022-August/076687.html
Titolo: Re:Inviare file con gb.web.gui
Inserito da: milio - 09 Agosto 2022, 14:58:10
 :ok: :ok: :ok:

Ok con l'esempio ho capito finalmente come si fa.... Grazie a tutti

Titolo: Re:Inviare file con gb.web.gui
Inserito da: Gianluigi - 09 Agosto 2022, 15:19:50
:ok: :ok: :ok:

Ok con l'esempio ho capito finalmente come si fa.... Grazie a tutti

Ho fatto avere i tuoi ringraziamenti alla lista.

Finalmente! Una volta tanto invece di essere tu che aiuti gli altri, hai ricevuto aiuto, sono contento che almeno una volta siamo riusciti a contraccambiare  :D

 :ciao:
Titolo: Re:Inviare file con gb.web.gui
Inserito da: Gianluigi - 10 Agosto 2022, 13:29:54
... aspettando la risposta di Benoit....

Benoit ha risposto così alla domanda di Lee:

Citazione
OK, this is not a bug, but the code that is flawed.

Your friend thought that a file can be sent from the server to the client by using 'Response.SendFile()' inside an event handler.

1) First mistake: a file download is initiated by the client, never by the server.

2) Second mistake: 'Response.SendFile()' works only if the client initiated a download request, i.e. if it expects that kind of answer. This is not the case when you are running an event handler in 'gb.web.gui', where the communication follows a specific protocol, that you can't hijack with lower level functions like 'Response.Send()'.

Regards,

--
Benoît Minisini.

Ciao
Titolo: Re:[RISOLTO] Inviare file con gb.web.gui
Inserito da: milio - 10 Agosto 2022, 18:40:23
Io programmo un po' a pane e salame... :P Se vedo che un componente ha una funzione che si chiama SendFile penso che serva per inviare un file.... Se poi tale funzione serve solo di appoggio al componente e viene usata a basso livello allora io la rinominerei in Responce._SendFile(), in questo modo non mi appare nel menu di completamento automatico.

Comunque va bene lo stesso, la soluzione che mi hanno suggerito funziona, quindi, di nuovo, grazie a tutti.