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!

Carlos Dk

Apasionado por la enseñanza y el SEO

26 comentarios en “Subir fichero por FTP con vb6 (visual basic 6)

  • el 13 enero, 2013 a las 6:01 am
    Permalink

    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.

    Respuesta
    • el 13 enero, 2013 a las 11:08 am
      Permalink

      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.

      Respuesta
  • el 14 junio, 2013 a las 7:39 pm
    Permalink

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

    Respuesta
  • el 27 mayo, 2014 a las 7:09 pm
    Permalink

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

    Respuesta
    • el 28 mayo, 2014 a las 8:49 am
      Permalink

      ¿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!

      Respuesta
      • el 9 enero, 2019 a las 10:23 pm
        Permalink

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

        Respuesta
        • el 9 enero, 2019 a las 11:12 pm
          Permalink

          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 😉

          Respuesta
  • el 21 agosto, 2014 a las 5:19 pm
    Permalink

    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

    Respuesta
  • el 24 agosto, 2014 a las 7:21 am
    Permalink

    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!

    Respuesta
  • el 22 enero, 2016 a las 10:04 am
    Permalink

    Muchas gracias por tu desinterés

    Respuesta
  • el 22 junio, 2016 a las 4:09 pm
    Permalink

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

    Respuesta
  • el 22 junio, 2016 a las 4:26 pm
    Permalink

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

    Respuesta
  • el 15 noviembre, 2016 a las 2:53 am
    Permalink

    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?

    Respuesta
    • el 21 noviembre, 2016 a las 8:16 am
      Permalink

      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!

      Respuesta
      • el 21 noviembre, 2016 a las 8:19 am
        Permalink

        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!

        Respuesta
  • el 10 mayo, 2018 a las 12:59 am
    Permalink

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

    Respuesta
  • el 10 mayo, 2018 a las 9:31 pm
    Permalink

    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 😉

    Respuesta
  • el 11 mayo, 2018 a las 5:52 pm
    Permalink

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

    Respuesta
    • el 12 mayo, 2018 a las 7:37 pm
      Permalink

      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 😉

      Respuesta
  • el 25 noviembre, 2023 a las 5:25 pm
    Permalink

    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.

    Respuesta
  • el 19 enero, 2024 a las 7:13 am
    Permalink

    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

    Respuesta
    • el 30 enero, 2024 a las 5:39 pm
      Permalink

      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.

      Respuesta

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.