Hola:
El problema está en q tratas de cargar el archivo completo en memoria antes de enviarlo al cliente:
Código Java:
Ver originalbyte[] datos = new byte[longitud];
archivo.read(datos);
si el archivo es más grande q la memoria q tienes disponible es evidente q el programa va a dar un error:
La solución es crear un buffer intermedio y hacer la copia de poco a poco.
Código Java:
Ver originalServletOutputStream ouput = response.getOutputStream();
byte[] buf = new byte[1024];
int bytesRead;
while ((bytesRead = input.read(buf)) > 0) {
output.write(buf, 0, bytesRead);
}
de esta forma solo tienes 1024 bytes en memoria en cada momento.
slds;
nup_
PD: Por cierto, quizás quieras ver esta página:
http://es.wikipedia.org/wiki/Directory_traversal
a no ser q tengas algún mecanismo de seguridad q no se muestre aquí, estás exponiendo todo tu sistema de ficheros a cualquier atacante q tenga acceso a tu página.
Para algunas soluciones:
https://www.securecoding.cert.org/co...alidating+them http://stackoverflow.com/questions/2...aversal-attack