Subir fichero por FTP con vb6 (visual basic 6)

Bienvenidos a VerTutoriales.com, en esta ocasión vamos a ver como subir un archivo local a un servidor remoto por FTP utilizando el componente INET de visual basic.

Actualmente estoy desarrollando una aplicación de gestión para cableoperadoras, esta aplicación contempla las necesidades básicas para mis clientes, pero seguimos ampliando módulos para dejar la aplicación cada vez más completa y que le solucione más problemas a los usuarios. Sino habéis visto el dossier que apuntaba en el enlace anterior, os resumo que lo que hace la aplicación es facturar a sus clientes, generando las facturas e imprimiendolas (por ahora). Quiero darle un valor añadido y pensando un poco en el ahorro de papel y tinta (que hay que cuidar nuestro entorno) vamos a generar las facturas en PDF (que ya está listo) y vamos a subirlas a un espacio FTP para que sus clientes puedan consultar la factura online, facilitando así la emisión de factura, ahorrando ese enorme gasto y ayudando al medio ambiente!

Para comenzar, hemos creado una función para facilitar la reutilización de la operación tantas veces queramos y que lleva en su interior la asignación de parámetros de configuración para la conexión con el servidor. Estos parámetros son 4.

Dim sIP As String   ‘IP del servidor
Dim sUsuarioFTP As String  ‘Nombre del usuario FTP
Dim sPassFTP As String  ‘Clave de acceso al ftp
Dim sHost As String  ‘nombre del host

Una vez tengamos esos parámetros veamos la función completa:

Function SubirFTP(sOrigen As String, sDestino As String)

Dim sIP As String
Dim sUsuarioFTP As String
Dim sPassFTP As String
Dim sHost As String

sIP = «ftp://109.205.137.230»
sUsuarioFTP = «codedk92»
sPassFTP = «123654!»
sHost = «codigo.dkreativo.es»

With InetFTP

‘Asigna la Url, es decir el nombre del Host FTP
.URL = sIP
.RemoteHost = sHost

.Protocol = icFTP

‘nombre de usuario y password de la cuanta FTP
.UserName = sUsuarioFTP
.Password = sPassFTP

‘Escribe el fichero en el servidor con el comando Put
.Execute .URL, «put » + sOrigen + » » + sDestino

Do While .StillExecuting
DoEvents
Loop

UploadFile = (.ResponseCode = 0)
.Execute , «quit»

End With

End Function

Como podéis ver, la función recibe 2 parámetros, sOrigen debe de tener la dirección completa con el nombre de archivo que queremos subir, y en sDestino, la dirección completa con el nombre de archivo donde queremos ubicarlo.

Asignamos los parámetros de conexión y listo. Recordad añadir el complemento INET a vuestro proyecto y ponedle el nombre InetFTP para que lo reconozca.

Espero que os sirva, la función está probada y espero que en poco tiempo esté en producción, aunque antes hay que crear el acceso a los usuarios en la web del cliente para que puedan ver su factura, pero poco a poco.

Si tenéis cualquier sugerencia o duda, estoy a vuestra disposición!

Un saludo!

Comments (26)

  • marco antonio 13 enero, 2013

    Hola,

    Podrias por favor colocar un ejemplo sencillo del uso de la funcion? Estoy tratando de aplicarla, pero al correr el programa me sale un aviso indicando que debo colocar un signo de igual al colocar el nombre de la funcion con los parametros (origen y destino), estoy usando el evento click de un boton para llamar a la funcion y colocar un archivo en el FTP destino.

    Mil gracias, marco.

    Reply
    • VideoTutoriales 13 enero, 2013

      Es por la forma de llamarla, si estás realizando la llamada a la función y en este caso no devuelve nada, en vb6 se llaman las funciones sin los paréntesis, en este caso sería:

      SubirFTP «c:/miarchivoasubir.txt», «./miarchivoenserver.txt»

      Así debe de funcionarte sin pedirte el igual.

      La subida al FTP con vb6 es así de sencilla. Si aún así no te soluciona, pega el código que tienes a ver que puede ser.

      Reply
  • Juian 14 junio, 2013

    Oye donde me descargo el complemento INET para incluirlo al proyecto… No lo encuentro en las librerias por defecto que tiene el visual 6

    Reply
  • Jimgod 27 mayo, 2014

    Es muy Lento… tarda mucho y con un txt de 3KB

    Reply
    • videotutoriales 28 mayo, 2014

      ¿Lo sube realmente? A mi me funciona sin problema y a una velocidad relativa a mi conexión.

      He llegado a subir cientos de megas para una aplicación que subía un comprimido y no ha dado problemas 😉

      Salud!

      Reply
      • Claudio 9 enero, 2019

        Hola!, yo quiero obtener la fecha de un archivo en el FTP, alguien sabe como hacerlo ?
        GRacias

        Reply
        • Carlos Dk 9 enero, 2019

          En realidad, una vez descargues el archivo, lo único que tienes que hacer es sacar las propiedades del archivo, para este caso, he encontrado este ejemplo en internet
          Dim fs, f, s
          Set fs = CreateObject(«Scripting.FileSystemObject»)
          Set f = fs.GetFile(filespec)
          s = UCase(filespec) & vbCrLf
          s = s & «Creado: » & f.DateCreated & vbCrLf
          s = s & «Último acceso: » & f.DateLastAccessed & vbCrLf
          s = s & «Última modificación: » & f.DateLastModified
          MsgBox s, 0, «Información de acceso al archivo»

          Necesitas la librería FileSystemObject

          Espero que te sirva 😉

          Reply
  • Joker Systems 21 agosto, 2014

    olle pana de donde salen estos valores

    ‘Asigna la Url, es decir el nombre del
    .URL = sFTP

    .Protocol = icFTP no lo asignas valores a estas variables

    Reply
  • videotutoriales 24 agosto, 2014

    Ya lo he corregido 😉
    Supongo que al pasar el tutorial en vb6 puse otras variables para que se entendiera mejor:

    el sFTP es sIP.

    Con respecto a la icFTP es una constante que trae el objeto INET como podría ser otro:

    .AccessType = icDirect

    Un saludo!

    Reply
  • Julián 22 enero, 2016

    Muchas gracias por tu desinterés

    Reply
    • Carlos Dk 3 febrero, 2016

      ¿?

      Reply
  • daniel 24 enero, 2016

    capo!!!

    Reply
  • MIMI 22 junio, 2016

    HOLA donde me descargo el complemento INET para incluirlo al proyecto… No lo encuentro en las librerias por defecto que tiene el visual 6

    Reply
  • MIMI 22 junio, 2016

    seleccionar desde la ficha componentes Microsoft Internet Transfer control
    ya lo vi! gracias de todas formas
    🙂

    Reply
    • Carlos Dk 23 junio, 2016

      Tú preguntas, tú te respondes! Nada 😀

      Reply
  • AjRoBSeYeR 15 noviembre, 2016

    una preguntilla, hace la subida «bien», es decir el fichero aparece en el servidor ftp, pero con 0Bytes… es algo que puedo estar haciendo mal?

    Reply
    • Carlos Dk 21 noviembre, 2016

      Disculpa la tardanza en responder, parece ser que WordPress no quiere notificarme nuevos comentarios 🙂
      Con respecto a tu duda, revisa la configuración del FTP. es extraño que llegue a crearte el fichero pero se suba vacío. ¿Con qué configuración lo lanzas?

      Un saludo!

      Reply
      • Carlos Dk 21 noviembre, 2016

        El mensaje “Daily user sending quota exceeded” dice «La cuota de envío de uso diario se excedió», en otras palabras, «estás enviando más de lo que puedes». No es problema ni de tu outlook ni de ninguna configuración de usuario, es del servidor que tiene una limitación de cuota de envío y ya la superaste en el día.

        Lo recomendable es que revises lo contratado y sino ves nada «raro» habla directamente con el administrador del servidor.

        Espero que te sirva! Un saludo!

        Reply
  • PCALDERO 10 mayo, 2018

    que pena, esto no funciona. empezando porque la instruccion
    UploadFile = (.ResponseCode = 0)
    referencia la variable UploadFile que no está definida por ningun lado.

    Reply
  • Carlos Dk 10 mayo, 2018

    Hace muchísimo que escribí esto, pero pondría la mano en el fuego de que funciona, de todas maneras si solo es declarar la variable, creo que no tendrás problema en hacerlo.

    Recuerda añadir INET al proyecto 😉

    Reply
  • PCALDERO 11 mayo, 2018

    Hola Carlos DK, tienes toda la razon. Declaré la variable y funcionó correctamente. Muchas gracias por tu aporte y tu comentario.

    Reply
    • Carlos Dk 12 mayo, 2018

      Gracias a ti por el apunte… seguramente muchos no lleguen a leer hasta este comentario, en realidad el código no funciona si copias y pegas y no tienes un mínimo de intención o conocimiento de programar 😉

      Así que… lo dejaré así, que los neofitos aprendan 😉

      Reply
  • Raul E. Ortiz 25 noviembre, 2023

    Buen dia Carlos, estoy implementando este codigo. Se ejecuta pero no sube el archivo, ni me muestra errores (le tengo desconectado la validacion de errores), el componente esta instalado. Puedo escribirle por otro medio para que me colabore y me indica el costo ?

    Gracias, por su atencion y ayuda.

    Reply
    • Carlos Dk 22 diciembre, 2023

      Te escribí al email. Un saludo!

      Reply
  • Carlos Colorado 19 enero, 2024

    Excelente aporte amigo, me sucede el mismo error al ejecutar el código, se queda como colgado y me queda la duda de qué debemos poner en shost?

    Por favor tu ayuda

    Reply
    • Carlos Dk 30 enero, 2024

      Revisa la salida de mensajes, a ver qué te dice. Por norma debería de mostrarte el trazo completo para ver si la conexión falla por que no encuentra el host, no puede logar por user o pass, o cualquier otra cosa.

      Esos mensajes podrán indicar el siguiente paso.

      Reply

Leave a comment

Sign in to post your comment or sine up if you dont have any account.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Tu software de gestión


Últimas preguntas:

Logo Dkreativo
Vertutoriales