Usando FTP

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.

  • Creamos un formulario con dos TLabel y un TButton.
  • Añadimos una DATA a la declaración de TForm.
    1. DATA nRead  INIT 0
  • Y ponemos el siguiente código en el evento OnClick del botón:
  • 
       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

    1 comentario en “Usando FTP

    1. Pingback: xailer.info (esp) » Componente FTPFile

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada.