Page 1 of 1

TAsyncDownload

Posted: Mon Sep 11, 2017 4:58 pm
by Jose Lopez
Igancio,
Que falta para que pueda recibir un archivo que está en la web.
Si quieres la url real te la envio por privad.
WITH OBJECT ::oAsyncDownload1
:cURL := "http://www.paginaweb/fichero.jpg"
:Run()
If !:lSuccess
quit
EndIf
cImagen := :cBuffer
:Close()
END WITH
Gracias
Saludos.

Re: TAsyncDownload

Posted: Mon Sep 11, 2017 8:38 pm
by jfgimenez
Pepe,

la descarga es "asíncrona", lo que significa que en realidad estás lanzando el proceso de descarga en un segundo hilo... y ya terminará cuando sea ;-)

Lo que tienes que hacer es asignar el evento OnDisconnect. Cuando se dispare ese evento significará que, o bien ya has recibido el archivo, o que se ha producido algún error. Lógicamente, al ser completamente asíncrona, te aconsejo que crees el objeto en algún formulario que no se vaya a destruir mientras dure la descarga (p.ej. el formulario principal). Si lo pones en algún formulario que se destruye antes de terminar la descarga, ésta se interrumpirá o incluso podría continuar descargando pero no podrías llegar a obtener el resultado nunca.

Re: TAsyncDownload

Posted: Mon Sep 11, 2017 11:19 pm
by Jose Lopez
Jose F.
Gracias por la ayuda. Voy a hacer la prueba

Re: TAsyncDownload

Posted: Tue Sep 12, 2017 12:03 am
by Jose Lopez
Jose F.
Al final he optado por esto:
WITH OBJECT TInternet():New( Self )
IF :Open()
nTotalRegistros := Len(aDatos)
For nFor := 1 To nTotalRegistros
cURL := "http://www.zzzzzzzzzzz.com/images/productos/"+aDatos[nFor,24]
IF !Empty( hData := :OpenURL( cURL ) )
cImagen := ""
WHILE :ReadFile( hData, @cBuffer, BUFFER_LEN )
cImagen += cBuffer
ENDDO
:CloseURL( hData )
StrFile(cImagen,Application:cDirectory+"\Imagenes\"+StrZero(aDatos[nFor,4],9,0)+".jpg") //products_id
ENDIF
Next
:Close()
ENDIF
END WITH
No se si hay alguna manera mas rapida de hacerlo
Gracias.
Saludos.

Re: TAsyncDownload

Posted: Wed Sep 13, 2017 9:27 pm
by jfgimenez
Pepe,

si es para descargar un fichero:

Code: Select all

WITH OBJECT TAsynFileDownload():New( Application:oMainform )
   :OnDisconnect := {|| MsgInfo( "Se ha descargardo el archivo." ) }
   :OnError      := {|| MsgAlert( "Error al descargar el archivo." ) }
   :cRemoteFile  := cURL
   :cLocalFile   := "archivo.ext"
   :Create()
   :Run()
END WITH

Re: TAsyncDownload

Posted: Thu Sep 14, 2017 12:58 pm
by Jose Lopez
Gracias Jose F.
Va perfecto.
Esta misma técnica vale para bajar varias imágenes?.
El número de imágenes depende de los pedidos.
Salu2
Pepe.