Pregunta

estoy descargando un archivo PDF de mi servidor. Me puse el "Content-Disposition" como "unión". Su trabajo es muy fino Firefox. Pero en su IE8 muestra como en línea. Cualquier indicador rápido para resolver este problema?

Editar:

Estoy utilizando Springs a escribir el flujo de matriz de bytes PDF. Y el uso de JSP en el lado del cliente a la pantalla.

lado del cliente:

Estoy usando una rejilla de DHTML y mantener una etiqueta. El código en la apariencia de la red como:

<a href='javascript:viewPDF(14)' target="_self" >View</a>

Al hacer clic con el método de esta ViewPDF se invoca. Seguí este código en mi archivo JavaScript.

function viewPDF(id) {
    $("#pdfID").val(id);
    $("#myform").attr('action',url);
    $("#myform").submit();
}

base de código del lado del servidor:

ByteArrayOutputStream reportBAOS = getPDFByteArrayStream();/*This is my method which returns the byte array stream.*/
response.setContentType("application/pdf");
response.setHeader("Content-Disposition","attachment; filename=testfile");
response.setHeader("Pragma","Public");
response.setHeader("Cache-Control","must-revalidate,post-check=0,pre-check=0");
response.setHeader("Expires","0");
ServletOutputStream os = response.getOutputStream();
os.write(reportBAOS.toByteArray());
os.flush();
os.close();
¿Fue útil?

Solución 2

Me pasó un día de averiguar cuál era el problema. Pero finalmente lo conseguí.

No se puede decir que el Evan Mulawski 's respuesta incorrecta. Probé con su código uniforme. Pero ninguna ayuda. Finalmente encontré que la extensión de nombre de archivo no existe. Yo sólo adjuntas .pdf a testfile.

response.setHeader("Content-Disposition","attachment; filename=testfile.pdf");

Ahora retira el siguiente.

response.setHeader("Pragma","Public");
response.setHeader("Cache-Control","must-revalidate,post-check=0,pre-check=0");
response.setHeader("Expires","0");

A pesar de que el código anterior todavía me estoy haciendo el PDF como un archivo adjunto.

Otros consejos

Añadir estos encabezados:

header("Pragma: public"); //This one may work by itself.
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("200 HTTP/1.0 OK"); //HTTP 1.0 Compatible

Esto obligará a Internet Explorer para descargar el archivo desde el servidor.

Estoy de acuerdo con multiplexor. En realidad, el problema es que si el 'nombre' no termina con el sufijo que se asocia con Acrobat Reader en Windows. Tan pronto como se agrega ".pdf" funciona bien.

A continuación, theres la pitfal de Cache-Control: no-cache lo que hará que el IE para vomitar. Uso Cache-control: private para evitar el almacenamiento en caché.

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