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

StackOverflow https://stackoverflow.com/questions/158149

Pregunta

¿Hay alguna forma de validar en el navegador del lado del cliente si el tamaño de un archivo que se carga desde una página JSP supera un límite de tamaño establecido sin obligar al usuario a cargar todo el archivo solo para descubrir que es demasiado grande?

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

¡Gracias!

¿Fue útil?

Solución

Esta no es una solución perfecta, pero si marca el encabezado HTTP Content-Length con request.getHeader (" Content-Length ") , puede elegir no transferir todo el archivo .

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 leerla para que todo se transfiera.

Por otro lado, si le preocupan los ataques de denegación de servicio, entonces 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.

Otros consejos

Le sugiero que reconsidere la decisión de Flash y eche un vistazo a YUI Uploader, aquí:

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

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

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 eso podría ser demasiado tarde.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top