IE8 Problème: fichier PDF est affiché sous la forme en ligne
-
29-09-2019 - |
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();
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.