Question

Je télécharge un fichier PDF de mon serveur. Je mets le « Content-Disposition » comme « l'attachement ». Son travail est très beau Firefox. Mais dans IE8 son affiché en ligne. Tous les indicateurs rapides pour résoudre ce problème?

Edit:

J'utilise ressorts pour écrire le flux de tableau d'octets PDF. Et en utilisant JSP du côté client à l'affichage.

Côté client:

J'utilise une grille de DHTML et de garder une étiquette. Le code dans l'apparence de la grille comme:

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

Le clic de ce la méthode ViewPDF s'invoquée. J'ai gardé ce code dans mon fichier javascript.

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

base de code côté serveur:

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();
Était-ce utile?

La solution 2

J'ai passé une journée à comprendre ce qui était la question. Mais finalement je l'ai eu.

Je ne peux pas dire Evan Mulawski de mauvaise réponse. J'ai essayé avec son code même. Mais aucune aide. Enfin, je trouve que l'extension de nom de fichier est manquant. Je viens à testfile .pdf apposé.

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

Maintenant, je retire ce qui suit.

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

Même avec le code ci-dessus encore, je reçois le PDF en pièce jointe.

Autres conseils

Ajoutez ces en-têtes:

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

Cela forcera Internet Explorer pour télécharger le fichier à partir du serveur.

Je suis d'accord avec Multiplexeur. En fait, le problème est que si le « nom » ne se termine pas avec le suffixe associé à Acrobat Reader dans les fenêtres. Dès que vous ajoutez « .pdf » cela fonctionne bien.

Alors la pitfal de theres Cache-Control: no-cache qui fera IE vomir. Utilisez Cache-control: private pour empêcher la mise en cache.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top