22 de febrero de 2008

Cargando/descargando en VFP de manera sencilla

Artículo original: VFP Uploading/Downloading Made Simple
http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,e7cccb45-7d99-4c35-85bc-e123c81c8794.aspx
Autor: Craig Boyd
Traducido por: Luis María Guayán

Cargando, descargando y mas

Siempre he querido algunos comandos en lenguaje Visual FoxPro que realizaran cargas y descargas de archivos de sitios Web, de sitios FTP u otra ubicación, realmente fácil. Ah, también he querido un indicador de progreso para estas cargas y descargas que sea fácil de implementar. Habiéndome enredado con varias librerías de clases, y componentes de terceros por algunos años, decidí que era tiempo de escribir una FLL que haga lo que yo quería, entonces cree vfpconnection.fll.

VFP Connection FLL

Internamente vfpconnection.fll está utilizando la biblioteca LibCurl (aquí esta su licencia), por lo que hay toneladas de otras características que puedo, y podría, agregar como esto avance. Por ahora proveeré a los desarrolladores VFP con lo que creo que es mas fácil y sencillo, funciones de carga y descarga de archivos en Visual FoxPro (FTPGet, HTTPGet, FileGet, FTPPut, HTTPPut, FilePut, FTPToStr, y HTTPToStr). También se ofrece la posibilidad de descargar archivos de FTP y HTTP en la memoria (similar a la función FileToStr) que evita la escritura y lectura de disco, y puede resultar muy conveniente cuando un desarrollador sólo quiere leer algo de un servidor. Y ofrece una vía sumamente fácil de implementar un indicador de progreso a través de una llamada a una función o método.

Lo que viene ...

He creado un ejemplo bien bonito de lo útil de tener una FLL como ésta. En mi próxima entrada de mi blog, presentaré una aplicación VFP que he creado llamada AppUpdate, con lo que usted será capaz de usar Cargas/Descargas para sus aplicaciones Visual FoxPro como muy avanzado (aunque sea simple). Un agradecimiento especial a un cliente mío por permitirme salir antes de tiempo y compartir con mis lectores. ¡Pase lo que pase, hasta próxima … Visual FoxPro Rocks!

Aquí está el enlace de descarga acostumbrado, algunos ejemplos de código para usar vfpconnection.fll, y la documentación de la librería:
Descarga de VFPConnection FLL (90 KB aprox.)

Código de ejemplo de VFPConnection:

SET LIBRARY TO (LOCFILE("vfpconnection.fll","FLL"))
? FTPGet("FTP://myusername:mypassword@mysite.com/mydir/myfile.zip", "C:\myfile.zip", "MyCommand()")
? HTTPGet("http://www.mysite.com/mypage.htm", "C:\mypage.htm", "MyCommand()")
? FILEGet("File://C:\MyFile.txt", "C:\MyFileCopy.txt", "MyCommand()")
? FTPPut("C:\myfile.zip", "FTP://myusername:mypassword@mysite.com/mydir/myfile.zip", "MyCommand()")
? HTTPPut("C:\mypage.htm", "http://www.mysite.com/mypage.htm", "MyCommand()")
? FilePut("C:\myfile.zip", "File://C:\myfile.zip", "MyCommand()")
m.lcString1 = FTPToStr("FTP://myusername:mypassword@mysite.com/mydir/myfile.txt", "MyCommand()")
m.lcString2 = HTTPToStr("http://www.mysite.com/mypage.htm", "MyCommand()")
SET LIBRARY TO

FUNCTION MyCommand()
  ? nConnectTotalBytes
  ? nConnectBytesSoFar
ENDFUNC


Documentación de VFPConnection (Gracias Germán!!!)

Function FTPGet()

Sintaxis: FTPGet(cSourceURL, cDestination[, cCallbackFunction)

Parámetros:
cSourceURL - La URL para el archivo que desea descargar.
cDestination - La ruta (directorio) completa y el nombre de archivo donde desea guardar el archivo fuente.
cCallbackFunction - Una cadena opcional que indica una función, procedimiento o método que desea desencadenar cuando ocurra una lectura/escritura, algo como "MyCallback()".

Valor devuelto:
Lógico - regresa .T. si tiene éxito o .F. si la operación ha fallado.

Comentarios:
Esta función le da la capacidad para descargar un archivo desde un sitio FTP.
Para especificar el puerto o información de ingreso, simplemente debe incluirla en cSourceURL, como por ejemplo:

"FTP://myusername:mypassword@myftpsite.com:21/mydir/myfile.zip".

Cuando se llama a la función cCallbackFunction, la FLL crea dos (2) variables  (nConnectTotalBytes y nConnectBytesSoFar) dinámicamente. Estas variables pueden utilizarse con la función, procedimiento o método especificado para determinar el tamaño total en bytes del archivo fuente, así como el progreso total de la operación (Porcentaje = 100 * nConnectBytesSoFar / nConnectTotalBytes).


Function HTTPGet()

Sintaxis: HTTPGet(cSourceURL, cDestination[, cCallbackFunction)

Parámetros:
cSourceURL - La URL para el archivo que desea descargar.
cDestination - La ruta (directorio) completo y nombre de archivo donde desea guardar el archivo fuente.
cCallbackFunction - Una cadena opcional que indica una función, procedimiento o método que desea desencadenar cuando ocurra una lectura/escritura, algo como "MyCallback()".

Valor devuelto:
Lógico - regresa .T. si tiene éxito o .F. si la operación ha fallado.

Comentarios:
Esta función le da la habilidad para descargar un archivo desde un sitio web.

Cuando se llama a la función cCallbackFunction, la FLL crea dos (2) variables  (nConnectTotalBytes y nConnectBytesSoFar) dinámicamente. Estas variables pueden utilizarse con la función, procedimiento o método especificado para determinar el tamaño total en bytes del archivo fuente, así como el progreso total de la operación (Porcentaje = 100 * nConnectBytesSoFar / nConnectTotalBytes).


Function FILEGet()

Sintaxis: FILEGet(cSourceURL, cDestination[, cCallbackFunction])

Parámetros:
cSourceURL - La ruta (directorio) completo y nombre del archivo que desea copiar.
cDestination - La ruta (directorio) completo y nombre de archivo donde desea guardar el archivo fuente.
cCallbackFunction - Una cadena opcional que indica una función, procedimiento o método que desea desencadenar cuando ocurra una lectura/escritura, algo como "MyCallback()".

Valor devuelto:
Lógico - regresa .T. si tiene éxito o .F. si la operación ha fallado.

Comentarios:
Esta función le da la capacidad para copiar un archivo desde una ubicación local o remota..

El formato para el parámetro cSourceURL es ligeramente diferente a lo que podría esperarse. Para copiar el archivo C:\MyDir\MyFile.zip debe especificar cSourceURL como "FILE:// C:\MyDir\MyFile.zip".

Cuando se llama a la función cCallbackFunction, la FLL crea dos (2) variables  (nConnectTotalBytes y nConnectBytesSoFar) dinámicamente. Estas variables pueden utilizarse con la función, procedimiento o método especificado para determinar el tamaño total en bytes del archivo fuente, así como el progreso total de la operación (Porcentaje = 100 * nConnectBytesSoFar / nConnectTotalBytes).


Function FTPPut()

Sintaxis: FTPGet(cSource, cDestinationURL[, cCallbackFunction)

Parámetros:
cSource - La ruta (directorio) completo y nombre del archivo que desea subir.
cDestinationURL - La URL a donde debe subirse el archivo especificado en cSource.
cCallbackFunction - Una cadena opcional que indica una función, procedimiento o método que desea desencadenar cuando ocurra una lectura/escritura, algo como "MyCallback()".

Valor devuelto:
Lógico - regresa .T. si tiene éxito o .F. si la operación ha fallado.

Comentarios:
Esta función le da la habilidad para subir un archivo a un sitio FTP.
Para especificar el puerto o información de ingreso, simplemente debe incluirla en cDestinationURL, como por ejemplo:

"FTP://myusername:mypassword@myftpsite.com:21/mydir/myfile.zip".

Cuando se llama a la función cCallbackFunction, la FLL crea dos (2) variables  (nConnectTotalBytes y nConnectBytesSoFar) dinámicamente. Estas variables pueden utilizarse con la función, procedimiento o método especificado para determinar el tamaño total en bytes del archivo fuente, así como el progreso total de la operación (Porcentaje = 100 * nConnectBytesSoFar / nConnectTotalBytes).


Function HTTPPut()

Sintaxis: HTTPGet(cSource, cDestinationURL[, cCallbackFunction)

Parámetros:
cSource - La ruta (directorio) completo y nombre del archivo que desea subir.
cDestinationURL - La URL a donde debe subirse el archivo especificado en cSource.
cCallbackFunction - Una cadena opcional que indica una función, procedimiento o método que desea desencadenar cuando ocurra una lectura/escritura, algo como "MyCallback()".

Valor devuelto:
Lógico - regresa .T. si tiene éxito o .F. si la operación ha fallado.

Comentarios:
Esta función le da la habilidad subir un archivo a un sitio Web.

Cuando se llama a la función cCallbackFunction, la FLL crea dos (2) variables  (nConnectTotalBytes y nConnectBytesSoFar) dinámicamente. Estas variables pueden utilizarse con la función, procedimiento o método especificado para determinar el tamaño total en bytes del archivo fuente, así como el progreso total de la operación (Porcentaje = 100 * nConnectBytesSoFar / nConnectTotalBytes).


Function FILEPut()

Sintaxis: FILEPut(cSource, cDestinationURL[, cCallbackFunction])

Parámetros:
cSource - La ruta (directorio) completo y nombre del archivo que desea copiar.
cDestinationURL - La ruta (directorio) completo y nombre de archivo donde desea copiar el archivo especificado en cSource.
cCallbackFunction - Una cadena opcional que indica una función, procedimiento o método que desea desencadenar cuando ocurra una lectura/escritura, algo como "MyCallback()".

Valor devuelto:
Lógico - regresa .T. si tiene éxito o .F. si la operación ha fallado.

Comentarios:
Esta función le da la capacidad para copiar un archivo desde una ubicación local o remota..

El formato para el parámetro cDestinationURL es ligeramente diferente a lo que podría esperarse. Para copiar el archivo C:\MyDir\MyFile.zip se debe especificar cDestinationURL como "FILE:// C:\MyDir\MyFile.zip".

Cuando se llama a la función cCallbackFunction, la FLL crea dos (2) variables  (nConnectTotalBytes y nConnectBytesSoFar) dinámicamente. Estas variables pueden utilizarse con la función, procedimiento o método especificado para determinar el tamaño total en bytes del archivo fuente, así como el progreso total de la operación (Porcentaje = 100 * nConnectBytesSoFar / nConnectTotalBytes).


Function FTPToStr()

Sintaxis: FTPToStr(cSourceURL[, cCallbackFunction)

Parámetros:
cSourceURL - La ruta (directorio) completo y nombre del archivo que desea retornar como una cadena de texto.
cCallbackFunction - Una cadena opcional que indica una función, procedimiento o método que desea desencadenar cuando ocurra una lectura/escritura, algo como "MyCallback()".

Valor devuelto:
Caracter - el contenido del archivo especificado por cSourceURL

Comentarios:
Esta función le da la habilidad para recuperar una archivo desde un sitio FTP como una cadena de texto.

Para especificar el puerto o información de ingreso, simplemente debe incluirla en cSourceURL, como por ejemplo:

"FTP://myusername:mypassword@myftpsite.com:21/mydir/myfile.zip".
Cuando se llama a la función cCallbackFunction, la FLL crea dos (2) variables  (nConnectTotalBytes y nConnectBytesSoFar) dinámicamente. Estas variables pueden utilizarse con la función, procedimiento o método especificado para determinar el tamaño total en bytes del archivo fuente, así como el progreso total de la operación (Porcentaje = 100 * nConnectBytesSoFar / nConnectTotalBytes).


Function HTTPToStr()

Sintaxis: HTTPToStr(cSourceURL[, cCallbackFunction)

Parámetros:
cSourceURL - La ruta (directorio) completo y nombre del archivo que desea copiar.
cCallbackFunction - Una cadena opcional que indica una función, procedimiento o método que desea desencadenar cuando ocurra una lectura/escritura, algo como "MyCallback()".

Valor devuelto:
Lógico - regresa .T. si tiene éxito o .F. si la operación ha fallado.

Comentarios:
Esta función le da la capacidad para recuperar una archivo desde un sitio Web como una cadena de texto.

Cuando se llama a la función cCallbackFunction, la FLL crea dos (2) variables  (nConnectTotalBytes y nConnectBytesSoFar) dinámicamente. Estas variables pueden utilizarse con la función, procedimiento o método especificado para determinar el tamaño total en bytes del archivo fuente, así como el progreso total de la operación (Porcentaje = 100 * nConnectBytesSoFar / nConnectTotalBytes).


9 comentarios :

  1. me devuelve falso pero no tengo ni pista de porqué cargo la libreria y ejecuto el sig comando
    ? FTPPut("e:\google drive\pra\rrera\mha\VE_8_20180801.csv","FTP://ftp_Herdsaa:zzzz@sfa.fndonsxwtr.com.ar/Diores/heexcadsra")

    ResponderBorrar
  2. Hola, esta función sirve para el protocolo FTPS ? gracias

    ResponderBorrar
    Respuestas
    1. Hola, hay una versión que acepta los protocolos HTTPS, FTPS , etc

      Borrar
  3. Hola, que funcion puedo usar par ver el contenido de una carpeta ftp (dado que a veces el cliente no sabe el nombre del archivo con que lo han subido). Gracias mi correo es informaticasoftpower@gmail.com.

    ResponderBorrar
  4. Hola a todos, tengo el usuario con @

    ? FTPPut("C:\myfile.zip", "FTP://myusername@dominio.com.ar:mypassword@mysite.com/mydir/myfile.zip", "MyCommand()")

    Entiendo que el problema es el "@" en el usuario.

    gracias

    ResponderBorrar
    Respuestas
    1. Increible que tuve este mismo problema, y la solucion esta en comentario.

      Borrar
  5. En el 2023 ,sigue siendo vigente esta pagina, pude solucionar un problema . Gracias.

    ResponderBorrar
  6. Podrias hacer un ejemplo con el protocolo TUS.IO desde ya muchas gracias

    ResponderBorrar

Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.