Tengo un servlet que permite a los usuarios descargar archivos zip (potencialmente grandes) desde una página web. Si el usuario hace clic en un enlace para descargar un archivo zip, código similar al siguiente se ejecuta en el servlet:Servlets de Java: la descarga de archivos se rompe cuando el usuario navega fuera de la página
response.setContentType("application/zip");
response.setHeader("Content-disposition", "attachment; filename=foo.zip");
response.setHeader("Pragma", "");
response.setHeader("Cache-Control", "no-store");
ZipOutputStream out = new ZipOutputStream(response.getOutputStream());
// write entries to the zip file...
...
out.close()
Sin embargo, si se actualiza el usuario o salga de la página después de que comience la descarga y antes de que completa (en Firefox 3.5.7), la descarga fallará. El siguiente error aparece:
C: \ bla \ foo.zip.part no podía ser salvado , debido a que el archivo de origen podría no se puede leer.
Vuelva a intentarlo más tarde o póngase en contacto con el administrador del servidor .
¿Alguna idea sobre cómo puedo asegurarme de que la descarga continúe en este caso?
ACTUALIZACIÓN: El enlace que inicia la descarga es un simple enlace de vainilla. Curiosamente, el comportamiento es diferente en IE. Al hacer clic en los enlaces en cualquier lugar del sitio (desde la pantalla cargada actualmente) parece que no se carga (la barra de estado del navegador dice "Esperando https://mysite/clicked_linky.do ..."), bloqueando hasta que finalice la descarga. Escribir una URL diferente en la barra de direcciones o usar un atajo/enlace favorito navega fuera de la página, pero la descarga continúa como se esperaba. Solo Firefox parece mostrar el comportamiento exacto que describí anteriormente, aunque el bloqueo de IE no es óptimo.
Estoy de acuerdo, una solicitud de descarga independiente servlet debe no se equivoque si el cliente lleva el navegador a otra página, o lo actualiza. Implementé un servlet de descarga en Java y no experimenté ninguno de estos problemas. –
Es un simple enlace vainilla. Actualicé la pregunta. – Jeff