programacion paginas pagina ejemplos desde codigo cero aplicacion java javascript jsp file-upload

paginas - ¿Cómo se restringe el tamaño de un archivo cargado con JavaScript(o Java) sin transferir todo el archivo?



paginas web en java ejemplos (3)

¿Hay alguna manera de validar en el navegador del lado del cliente si el tamaño de un archivo cargado 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?

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

¡Gracias!


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.


Te sugiero que reconsideres la decisión de Flash y eches un vistazo al cargador de YUI, aquí:

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

Entre otras cosas, el evento fileSelect te dirá el tamaño del archivo seleccionado en bytes inmediatamente después de haberlo seleccionado, pero antes de que se cargue, por lo que podrás restringirlo en consecuencia.


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

A modo de explicación, un archivo extremadamente grande no se transferirá de una 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, no puede confiar realmente en el encabezado Content-Length porque puede falsificarse 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.