Hace algún tiempo, Carlos Ortiz preguntaba si había un modo sencillo de descargar y/o subir archivos a un FTP.
Coincidiendo con Carlos en que el uso de los métodos :OpenFile(), :ReadFile() y :WriteFile() del componente TFtp de Xailer no es el mejor camino para un usuario nuevo con la herramienta, me dispuse a escribir un componente que lo haga de un modo un poco más amigable, donde sólamente sea necesario especificar los datos de la conexión, el nombre del archivo y poco más.
Las propiedades de este componente son:
-
PROPERTY cRemoteFile: el nombre del archivo en el servidor FTP.
PROPERTY cLocalFile: el nombre del archivo local.
PROPERTY cUser: el nombre de usuario para acceder al FTP.
PROPERTY cPassword: la contraseña.
PROPERTY cServer: el servidor FTP. Puede indicarse tanto con su nombre (ftp.myserver.com) como con una dirección IP (127.0.0.0).
PROPERTY nTransferType: especifica si vamos a hacer una transferencia binaria o ASCII. Los valores que puede tomar esta propiedad son ftpBINARY o ftpASCII.
PROPERTY nBuffer: el tamaño del buffer de lectura y/o escritura que se va a utilizar durante la subida o bajada del archivo. Su valor por defecto es de 16 Kb.
Los eventos:
-
EVENT OnError( oSender, nError, cError )
Este evento nos notificará cuando alguna operación falle del código del error y su descripción.
En caso de que el error sea un error remoto, el valor de nError será mayor o igual que 12.000 y cError nos informará en casi todos los casos de la descripción, pero si el error se debe a un fallo local nError tendrá el último valor devuelto por FError() y cError estará vacío.
EVENT OnStart( oSender, nFileSize )
Se lanza cuando se va a empezar a subir o bajar un archivo y nos informa de su tamaño total en bytes. Es útil si se quiere actualizar una barra de progreso o informar al usuario del tamaño del archivo.
EVENT OnComplete( oSender )
Se lanza cuando la subida o descarga del archivo termina.
EVENT OnProgress( oSender, nBytes )
Cada vez que se envía o recibe un bloque de datos se lanza este evento y se informa en nBytes de la cantidad de datos leídos. Al igual que en OnStart(), sirve para actualizar una barra de progreso y/o informar al usuario de cuántos bytes se han leído/enviado.
Los métodos:
-
METHOD Upload()
METHOD Download()
Sirven para subir y descargar un archivo respectivamente.
Un pequeño ejemplo de cómo descargar un archivo.
DATA nRead INIT 0
oSender:lEnabled := .F.
WITH OBJECT TFTPFile():Create( Self )
:cRemoteFile := "tests/test.zip"
:cLocalFile := "c:test.zip"
:cServer := "ftp.myserver.com"
:cUser := "User"
:cPassword := "Password"
:OnStart := {|oSender, nSize| ::oLabel2:cText := ToString( nSize ) + " bytes" }
:OnProgress := {|oSender, nBytes| ::nRead += nBytes, ::oLabel1:cText := ToString( ::nRead ) }
:OnComplete := {|oSender| ::oLabel2:cText := "¡ Descargado !" }
:Download()
//:Upload()
:Destroy()
END
oSender:lEnabled := .T.
Para proba el test, sólo hay que configurar los datos de la conexión con unos reales y tras compilar/ejecutar ya podemos empezar a subir o descargar archivos desde nuestro FTP favorito.
En el ZIP está el fuente del componente y la librería lista para usar.
Saludos,
José Lalín
Pingback: xailer.info (esp) » Componente FTPFile