Domanda

sto scaricando un file PDF dal mio server. Ho impostato il "Content-Disposition" come "allegato". Il suo lavoro è molto fine Firefox. Ma in IE8 suo visualizzato come linea. Tutti gli indicatori rapidi per risolvere il problema?

Modifica:

Sto usando Springs a scrivere il flusso di array di PDF di byte. E utilizzando JSP nel lato client per display.

lato client:

Sto usando una griglia DHTML e mantenendo un tag. Il codice negli sguardi della griglia come:

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

Al clic di questo metodo ViewPDF viene invocato. Ho mantenuto questo codice nel mio file javascript.

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

base di codice lato server:

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();
È stato utile?

Soluzione 2

Ho trascorso una giornata per capire quale fosse il problema. Ma alla fine ho capito.

Non posso dire che il Evan Mulawski 's risposta sbagliata. Ho provato con il suo codice, anche. Ma nessun aiuto. Finalmente ho trovato che l'estensione del nome file è mancante. Ho appena allegati .pdf per testfile.

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

Ora ho rimosso il seguente.

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

Anche con il codice di cui sopra ancora sto ottenendo il PDF come allegato.

Altri suggerimenti

Aggiungi queste intestazioni:

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

Questo costringerà Internet Explorer per scaricare il file dal server.

Sono d'accordo con Multiplexer. In realtà il problema è che se il 'nome' non finisce con il suffisso che è associato con Acrobat Reader in Windows. Non appena si aggiunge ".pdf" funziona bene.

Poi cè il pitfal di Cache-Control: no-cache che farà sì che IE per vomitare. Utilizzare Cache-control: private per evitare la memorizzazione nella cache.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top