2012-08-22 13 views
8

Estoy descargando archivos de imagen de la web usando el siguiente código en mi aplicación de consola.Obtener tamaño del archivo de imagen antes de descargarlo de la web

WebClient client = new WebClient(); 
client.DownloadFile(string address_of_image_file,string filename); 

El código está funcionando absolutamente bien.

Quiero saber si hay una forma de obtener el tamaño de este archivo de imagen antes de descargarlo.

PD- Actualmente he escrito el código para hacer un rastreador que se mueve por el sitio descargando archivos de imagen. Entonces no sé su tamaño de antemano. Todo lo que tengo es la ruta completa del archivo que se ha extraído de la fuente de la página web.

+0

Posible duplicado de [Obtener http: /.../ Tamaño de archivo] (http: // stackoverflow .com/questions/122853/get-http-file-size) – Francis

Respuesta

6

Si el servicio web le da un encabezado HTTP Content-Length, entonces será el tamaño del archivo de imagen. Sin embargo, si el servicio web desea "transmitir" datos a usted (utilizando la codificación Chunk), no lo sabrá hasta que se haya descargado todo el archivo.

7

Aquí es un ejemplo simple puede probar si tiene archivos de diferentes extensiones como .gif, .jpg, etc que puede crear una variable o ajustar el código de una sentencia switch Caso

System.Net.WebClient client = new System.Net.WebClient(); 
client.OpenRead("http://someURL.com/Images/MyImage.jpg"); 
Int64 bytes_total= Convert.ToInt64(client.ResponseHeaders["Content-Length"]) 
MessageBox.Show(bytes_total.ToString() + " Bytes"); 
+0

Esto funciona como un encanto para mí, pero después del tercer uso detiene todo y se cuelga. Incluso intenté llamar al cliente. Desinciar() pero no está ayudando ... ¿Tiene alguna idea de por qué podría estar pasando? ¡Gracias! – Thpramos

+0

¿Puede mostrarnos el rastro de pila del bloqueo? – knocte

0

Debería ver esta respuesta: C# Get http:/…/File Size donde su pregunta está completamente explicada. Está utilizando la solicitud HEAD HTTP para recuperar el tamaño del archivo, pero también puede leer el encabezado "Content-Length" durante la solicitud GET antes de leer el flujo de respuesta.

+0

-1. O hazlo comentar o agrega un resumen del enlace a la respuesta. –

+0

Las preguntas y respuestas en el enlace especificado no necesitan explicación y es difícil agregar algo. No quiero copiar y pegar la respuesta de la publicación original. De todos modos, gracias por el comentario, lo tendré en cuenta en el futuro. – Perevalov

+0

Bienvenido a SO. Se espera que las respuestas de SO contengan un resumen de un enlace - verifique [FAQ] (http://stackoverflow.com/questions/how-to-answer) - "Proporcione contexto para los enlaces". –

2

Puede utilizar un HttpWebRequest para consultar el método HEAD del archivo y comprobar la longitud del contenido en la respuesta

Cuestiones relacionadas