2009-02-13 8 views
6

Tengo una etiqueta de entrada de archivo en mi aplicación web. Me gustaría comprobar que el archivo no sea demasiado grande antes de enviarlo al servidor. Por supuesto, todavía tengo el lado del servidor de validación. ¿Hay alguna forma de hacer esto con JavaScript? Debe funcionar en IE7 + y FF3 +. Gracias.¿Cómo recuperar el tamaño de un archivo antes de subirlo?

EDIT: somefileinputobject.files [0] .filesize funciona en FF, pero no IE.

+0

Desafortunadamente, esto es algo que aún no es multiplataforma sin usar complementos (por ejemplo, flash). http://www.w3.org/TR/FileAPI/ son las especificaciones de trabajo compatibles con Firefox. – Matthew

+0

Duplicado: http://stackoverflow.com/questions/158149/how-do-you-restrict-the-size-of-a-file-being-uploaded-with-javascript-or-java-w –

+0

See [this preguntas y respuestas más recientes.] (http://stackoverflow.com/questions/3717793/javascript-file-upload-size-validation) En los navegadores modernos esto es posible sin una solicitud al servidor, aunque la validación debe hacerse en el servidor también de todos modos. – Pointy

Respuesta

2

Es un problema difícil. Tienes que hacerlo con AJAX, y usar los encabezados de tamaño de archivo enviados por el navegador al servidor en la solicitud POST.

La biblioteca de UI de Yahoo tiene una herramienta para ayudar con esto. YUI Uploader

+0

Esta solución me funcionaría si pudiera verificar los encabezados del tamaño del archivo usando jQuery/Javascript antes del envío de Ajax. ¿Es posible? y si lo es, cómo? Gracias. – TonE

+0

Me temo que no es así. Creo que Flash tiene capacidades para eso. Si puede pagar el costo de rendimiento de una solicitud de servidor de ida y vuelta, su secuencia de comandos almacenará la información de los encabezados en POST y luego hará que su JQuery los recupere en una llamada por separado. Creo que así es como funciona la herramienta YUI. –

0

Javascript no puede hacer esto. Tendría serios problemas de seguridad. Quizás flash puede sin embargo.

+1

JS puede. Ver http://www.w3.org/TR/FileAPI/. Solo FF 3.6 lo admite por ahora (hasta donde yo sé). No es inseguro, en el sentido de que el usuario debe seleccionar el archivo. Sin embargo, es menos seguro, en el sentido de que ya no tienen que presionar un botón de enviar. – Matthew

+0

En todo caso, esta declaración es una acusación formal de Flash. –

+0

ni siquiera sé cómo llegué aquí, pero ... hoy ... es posible en todos los navegadores principales; D – GottZ

0

Respuesta corta: No, debe manejar esto en el servidor.

Respuesta larga: No confiable. Con IE se podía hacer algo como:

function checkSize(filespec) { 
var fso, f, s; 
fso = new ActiveXObject("Scripting.FileSystemObject"); 
f = fso.GetFile(filespec); 
s = f.size; 
// Do something with var s 
} 

Pero esto puede ser fácilmente comprimised por la configuración de seguridad del navegador o del uso de otro navegador o plataforma.

0

no se puede hacer de forma fiable con Javascript para todos los navegadores, pero se puede limitar el tamaño total de los datos enviados desde el web.config

0

Usted realmente no tiene muchas opciones si está utilizando el control de entrada de archivos tradicional. No puede verificarlo desde el lado del cliente y llegará a su maxRequestLength configurado antes de que tenga la oportunidad de verificarlo desde el servidor. Puede detectar la excepción que ocurre cuando se excede maxRequestLength.

Cuestiones relacionadas