2008-10-01 20 views
11

¿Hay alguna manera de validar en el navegador del lado del cliente si el tamaño de un archivo subido desde una página JSP supera un límite de tamaño establecido sin forzar al usuario a cargar todo el archivo solo para descubrir que era demasiado grande?¿Cómo se restringe el tamaño de un archivo cargado con JavaScript (o Java) sin transferir todo el archivo?

Me gustaría evitar cualquier control de propiedad o técnicas como Flash o ActiveX si es posible.

Gracias!

Respuesta

4

No es una solución perfecta, pero si comprueba el encabezado HTTP Content-Length con request.getHeader("Content-Length"), puede optar por no transferir todo el archivo.

A modo de explicación, un archivo extremadamente grande no se transferirá de una sola vez. Tendría que abrir una secuencia que represente esa porción de datos POST y leer de ella para que se transfiera todo.

Por otro lado, si le preocupan los ataques de denegación de servicio, entonces no puede confiar realmente en el encabezado Content-Length porque se puede falsificar fácilmente. En este caso, debe establecer un límite y transmitir una transferencia de este archivo, deteniéndose tan pronto como haya excedido ese límite.

2

sugerimos que reconsidere la decisión de Flash y echar un vistazo a la YUI subida, aquí:

http://developer.yahoo.com/yui/uploader/

Entre otras cosas, el evento de selección de ficheros le dirá el tamaño del archivo seleccionado en bytes inmediatamente una vez que se haya seleccionado, pero antes de que se cargue, podrá restringirlo según corresponda.

1

Con JSP o PHP no podrá restringir el tamaño del archivo porque su página no recibirá la solicitud hasta que la carga ya haya ocurrido. En ese momento, puede decidir no guardar el archivo, pero puede ser demasiado tarde.

Existen algunas soluciones de Java, por ejemplo. MyUploader o Hermes. Algunos incluso admiten múltiples cargas de archivos y reanudar cargas parciales, y algunos también le dan el código fuente. También puede escribir uno propio, pero deberá ser un applet firmado para poder funcionar porque necesita acceder al sistema de archivos local. Si está utilizando Apache como su servidor web, necesitará suficiente memoria RAM en su máquina para ajustarse a todo el tamaño del archivo en la memoria de todos los archivos que se carguen en un momento determinado.

Cuestiones relacionadas