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 StringsIP = «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 + » » + sDestinoDo While .StillExecuting
DoEvents
LoopUploadFile = (.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!
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.
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.
Oye donde me descargo el complemento INET para incluirlo al proyecto… No lo encuentro en las librerias por defecto que tiene el visual 6
Es muy Lento… tarda mucho y con un txt de 3KB
¿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!
Hola!, yo quiero obtener la fecha de un archivo en el FTP, alguien sabe como hacerlo ?
GRacias
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 😉
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
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!
Muchas gracias por tu desinterés
¿?
capo!!!
HOLA donde me descargo el complemento INET para incluirlo al proyecto… No lo encuentro en las librerias por defecto que tiene el visual 6
seleccionar desde la ficha componentes Microsoft Internet Transfer control
ya lo vi! gracias de todas formas
🙂
Tú preguntas, tú te respondes! Nada 😀
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?
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!
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!
que pena, esto no funciona. empezando porque la instruccion
UploadFile = (.ResponseCode = 0)
referencia la variable UploadFile que no está definida por ningun lado.
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 😉
Hola Carlos DK, tienes toda la razon. Declaré la variable y funcionó correctamente. Muchas gracias por tu aporte y tu comentario.
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 😉
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.
Te escribí al email. Un saludo!
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
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.