2009-09-27 10 views
12

Aquí es lo que estoy esperando hacer:tamaño Get del archivo solicitado a través de AJAX

Quiero enviar una petición AJAX a un archivo (preferiblemente con jQuery), y una vez que el archivo ha sido cargado, determinar el tamaño del archivo solicitado.

Después de buscar en Google, está claro que ni siquiera tengo una buena idea de la pregunta correcta para resolver esto. Cualquier ayuda sería muy apreciada.

Respuesta

37

Puede realizar una solicitud HTTP HEAD y obtener el tamaño aproximado de un archivo leyendo el Content-Length Encabezado HTTP.

Este tipo de solicitud se utiliza para obtener metainformación sobre la URL implícita en la solicitud, sin transferir ningún contenido de la misma en la respuesta.

var xhr = $.ajax({ 
    type: "HEAD", 
    url: "path/to/file.ext", 
    success: function(msg){ 
    alert(xhr.getResponseHeader('Content-Length') + ' bytes'); 
    } 
}); 
+0

+ upvote, esta debería ser la respuesta real :) –

+0

Gracias @meder! – CMS

+0

Acepto, de hecho, puedo terminar usando el otro método para la funcionalidad de dominios cruzados, pero esta es realmente la respuesta que estaba buscando cuando pregunté. – Peter

2

Puede crear un comando del lado del servidor que tome la ruta y el nombre del archivo, abra el archivo para obtener la longitud y devuelva el tamaño al cliente. La forma en que lo haga dependerá del idioma del lado del servidor que esté utilizando. ¿Es ese el tipo de acción que estás buscando?

+0

Hm ... Así que, podría usar ajax para llamar a un archivo php, que cargaría el contenido del archivo que realmente quiero, descubriría su tamaño y luego devolvería el contenido y el tamaño del archivo a javascript . Y hacerlo de esa manera me permitiría llamar contenido de otro dominio sin problemas. Eso suena absolutamente brillante, no del todo lo que pensé que estaba buscando, sino una solución fantástica. – Peter

+0

Sí, he hecho eso en el pasado con Java al crear un controlador de descarga autorizado. También es posible que desee ver la sugerencia de CMS: nunca he pensado en utilizar el comando HEAD, pero si todo lo que necesita es tamaño de archivo, eso podría funcionar aún más brillante. –

+0

esta es la única respuesta hasta el momento que evita la codificación gzip, lo que hace que la longitud del contenido no se envíe de regreso. – user3338098

0
var XHRObj = $.ajax({ 
    type:'HEAD', 
    url:'/', 
    success:function(data) { 
     console.log(XHRObj.getResponseHeader('Content-Length')) 
    } 
}) 

Es, básicamente, hacer una solicitud HTTP HEAD y consultar el contenido de longitud, que devuelve X bytes.

+0

si se utiliza la codificación gzip, el encabezado de longitud del contenido no se envía – user3338098

Cuestiones relacionadas