Colabora |
Descarga de Archivos utilizando WebclientComplemento WebRequest y WebResponse
Fecha: 06/Dic/2011 (16-11-11)
|
IntroducciónEn este ejemplo se utilizara las clase WebClient para realizar la descarga de archivos de la web, mientras que utilizaremos WebRequest y WebResponse para extraer la información de los archivos a descargar. Todas las clases son miembros de System.Net Contenido:
2) Codigo en el Form_Load 3) Variables en el form 4) Código en el Button 4.1) Comprobar dirección 4.2) Conexión a la web 4.3) Lamar a las funciones 4.4) SavefileDialog 4.5) Averiguar el tamaño del archvo a descargar 4.6) Iniciar la descarga 5) Código en el Timer 5.1) Averiguar el tamaño del archivo descargado 5.2) Mostrar datos y progreso de descarga 6) Funciones en el Módulo Funciones.vb 6.1) Función para extraer la extencion del archivo 5.3) Funcion para extraer el nombre y extencion del archivo Introduccion:Sobre el uso de la clase WebClient: El proyecto se inició utilizando la clase Weclient, pero al momento de avanzar con el trabajo se encontraron serias dificultades. La primera se refiere a la consulta de datos a la web, se necesitaba una instrucción que consulte el tamaño de un archivo alojado en internet. La única instrucción encontrada fue la siguiente: Dim Tamaño_Archivo As Integer El problema de esta instrucción es que antes de devolver el tamaño del archivo, lo descarga al equipo local, entonces resultaría poco eficiente descargar un archivo 100mb solo para averiguar su tamaño. La búsqueda de otra solución me llevo a la utilización de las clases WebRequest y WebResponse, de las cuales solo encontré en ejemplos en c++ del siguiente articulo . De su análisis deducir los procedimientos de consulta, no así el procedimiento para la descarga. Es así que el trabajo se desarrollo con tres clases cuando lógicamente podrían haberse utilizado dos. Diseño:El diseño está formado por un Form, un TextBox (Text_URL), un Button (Bt_desc), un ProgessBar (ProgressBar1), y 3 Labels (Label1, Lab_Descarga y Lab_Porc), un Savefiledialog1, y un Timer1. Posee un modulo llamado Funciones, que posee todas las funciones utilizadas.
El código:1) Espacio de Nombres 'Importamos los Espacios de Nombres Imports System.Net 2) Codigo en el Form_Load Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 3) Variables en el form: 'Las Variables Aqui se declararon las variables a utilizar.
4) Código en el Button:
4.1) Comprobar dirección: ' Primero se debe comprobar que la dirección tenga el Http , Ftp etc.. sino va a dar una exepcion Primero se comprueba que la dirección web del TextBox este correctamente escrita, esto es porque en el siguiente código se realiza una comprobación donde devuelve error al escribir mal la direccion.
4.2) Conexión a la web 'Inicio WebRequest/WewResponse (Extraido del codigo de ejemplo Aqui utilizamos las clases WebRequest y WebResponse para conectarnos con la web ingresada en el textBox.
4.3) Lamar a las funciones: 'Extraer extension del archivo Aquí extraemos la extencion del archivo a descargar y el nombre con su extension llamando a las funciones que se explican mas adelante.
4.4) SavefileDialog 'Abre el cuadro de dialogo para guardar el archivo
4.5) Averiguar el tamaño del archvo a descargar 'Averiguar el tamaño del archivo
4.6) Iniciar la descarga 'Inicio el timer Primero se inicia el Timer que controla el ProgressBar. Se utilizó la instrucción WebClient.DownloadFileAsync en vez de WebClient.DownloadFile, debido a que esta úlima bloqueaba los demas subprocesos, en este caso bloqueaba el Timer y por consiguiente todos los eventos de información descarga. 5) Código en el Timer
5.1) Averiguar el tamaño del archivo descargado 'Averiguar el tamaño del archivo descargado La comprobación para determinar si el achivo fue alojado localmente, si no es asi L_decarga devolveria Null y posteriormente error.
5.2) Mostrar datos y progreso de descarga 'Definir el progreso de descarga En este código definen los valores del ProgressBar en porcentaje, luego se convierten los tamaños a Mbites para ser mostrados en los labels.
6) Funciones en el Módulo Funciones.vb
6.1) Función para extraer la extencion del archivo 'FUNCION PARA EXTRAER LA EXTENSION DEL ARCHIVO
5.3) Funcion para extraer el nombre y extencion del archivo 'FUNCION PARA EXTRAER EL NOMBRE DEL ARCHIVO Nota: Espacios de nombres usados en el código de este artículo:System.Net
|
Lo comentado en este artículo está probado (y funciona) con la siguiente configuración:
El autor se compromete personalmente de que lo expuesto en este artículo es cierto y lo ha comprobado usando la configuración indicada anteriormente.
En cualquier caso, el Guille no se responsabiliza del contenido de este artículo.
Si encuentras alguna errata o fallo en algún link (enlace), por favor comunícalo usando este link:
Gracias.
Código de ejemplo (comprimido): |
Fichero con el código de ejemplo: javierc_Descarga_de_Archivos_utilizando_Webclient.zip - 120 KB
|