Cómo realizar una función que permita descargar ficheros de Internet (ficheros de páginas web: pdf, jpg, gif, mp3, etc). Explicaremos dos métodos parar realizar este cometido. No será necesario el uso de componentes de terceros.

En Delphi se pueden usar varios métodos para realizar descargas desde Internet a través de http e incluso servidores de FTP públicos. Hay métodos que requieren de componentes de terceros, como IPWorks. En este artículo explicaremos cómo realizar descargas de ficheros desde una página web utilizando dos métodos:

1. Utilizando WinInet

WinInet es un API de Windows para Internet (Microsoft Windows Internet Extensions). En el caso de Delphi, WinInet.pas es una unidad de Delphi donde se definen diferentes tipos y funciones para el acceso a contenidos en Internet, para los protocolos HTTP, HTTPS, FTP y Gopher. Para el uso de esta unidad será necesario que esté correctamente registrada la dll (librería) wininet.dll.

Utilizaremos, en concreto, las siguientes funciones del API WinInet: InternetOpenUrl, InternetOpen, InternetReadFile y InternetCloseHandle.

En la cláusula «Uses» del formulario o unidad donde queramos colocar la función descargarFichero colocaremos «wininet». De esta forma indicaremos a Delphi que queremos utilizar las funciones contenidas en la unidad WinInet.pas

Quedará algo así:

A partir de la cláusula «Implemantation» de nuestra unidad o formulario podremos añadir la siguiente función, que será la encargada de realizar la descarga del fichero de Internet pasado como parámetro en el fichero local también pasado como parámetro:

La función descargarFichero devolverá «True» en caso de que la descarga se haya realizado con éxito y «False» en caso de que haya habido algún error.

Para usar esta función añadiremos a nuestro formulario dos componentes de tipo TEdit (para introducir la URL del fichero a descargar de Internet txtURL y el sitio local donde se descargará txtLocal ). Un ejemplo de uso de esta función podría ser:

Uno de los inconvenientes de utilizar esta función para la descarga de ficheros desde Internet es que no se puede mostrar el progreso de la descarga.

2. Utilizando ExtActns

ExtActns es una unidad de Delphi que incorpora funciones de carácter variado (descarga de ficheros de Internet, envío de email, etc). Es una unidad perteneciente al VCL (Visual Componet Library), con lo cual no será necesario disponer de ninguna librería instalada en el sistema para este uso.

En nuestro caso, para la descarga de ficheros desde Internet, utilizaremos la clase TDownLoadURL.

En la cláusula «Uses» del formulario o unidad donde queramos colocar la función descargarFichero colocaremos «ExtActns». De esta forma indicaremos a Delphi que queremos utilizar las funciones contenidas en la unidad ExtActns.pas

Quedará algo así:

Puesto que esta función sí permite mostrar el progreso de la descarga, añadiremos en la cláusula «Private» el siguiente código:

Tras el «Implementation» añadiremos la función para realizar la descarga de la URL indicada:

A continuación colocaremos el procedimiento que mostrará el progreso de la descarga en una TProgressBar (que previamente habremos colocado en el formulario de nuestra aplicación Delphi):

Y por último un ejemplo de uso de esta función:

Donde:

  • lInfoDescarga, lInfoDescarga: componentes de tipo TLabel para mostrar información sobre la descarga (kilobytes descargados, velocidad de descarga, etc).
  • txtURL, txtLocal son componentes de tipo TEdit donde el usuario indicará la dirección de Internet donde se encuentra el archivo a descargar (URL) y la ruta y nombre del fichero en local (su PC) donde se descargará.
  • bp: componente de tipo TProgressBar que mostrará el progreso de la descarga.
  • tiempoIncial: variable de tipo TDateTime, declarada en la cláusula «Private» del formulario. Nos servirá para saber cuándo empezó la descarga y así poder calcular la velocidad de descarga actual según los bytes descargados (Progress).

Un ejemplo de uso de TDownLoadURL lo podréis ver en la aplicación AjpdSoft Test de Velocidad, cuyo código fuente en Delphi 6 está disponible completamente gratis (free) para usuarios registrados (si aún no lo eres pulsa aquí para registrarte):

AjpdSoft Test de Velocidad