Como forzar descarga de archivos
Esto resultó luego de un poco de lectura y prueba y error en el proyecto BChile de Excelsys.
Sucede que tratando de solucionar un problema de vulnerabilidad en el generador de informes (solucionado dicho sea de paso), salió al baile el “cómo” visualizar dichos informes (en pdf). 3 de 4 exploradores se comportaron como deberían (FF, Chrome y Safari), sin embargo, como siempre IE6 dio problemas. Se seteo el Content Type del Servlet de la siguiente manera:
response.setContentType("application/force-download");
Sin embargo, no solucionaba el problema en IE6. Averiguando un poco más llegué a estas páginas
http://support.microsoft.com/kb/260519
Donde se mostraba la cabecera especifica para forzar la descarga.
Luego, para implementar en servlet Java el código es el siguiente
private void generatePDFOutput(HttpServletResponse response)
throws IOException {
byte[] bytes = null;
/*........*/
response.setContentType("application/octet-stream");
response.setContentLength(bytes.length);
response.addHeader("Content-Disposition", "attachment; filename=" + _reportName+ "." + "pdf");
//response.addHeader("filename","_reportName"+ "." + PDF_FORMAT);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
}
Con esto se logra forzar en todos los navegadores (incluido IE6) el diálogo de descarga, para así evitar posibles problemas de visualización del documento.
Demás está decir que esto es aplicable a varios tipos de archivo, considerando el comportamiento por defecto que tiene IE X para los archivos con extensiones “microsoft”
Saludos