سؤال

أقوم بتنزيل ملف PDF من الخادم الخاص بي. قمت بتعيين "Disposition" على أنه "مرفق". يعمل بشكل جيد للغاية هو Firefox. ولكن في IE8 عرضت على أنها مضمونة. أي مؤشرات سريعة لحل هذه المشكلة؟

يحرر:

أنا أستخدم الينابيع لكتابة دفق صفيف بايت PDF. واستخدام JSP في جانب العميل لعرضه.

جانب العميل:

أنا أستخدم شبكة DHTML والحفاظ على علامة. يشبه الرمز في الشبكة:

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

عند النقر على هذا ، يتم استدعاء طريقة ViewPDF. ظللت هذا الرمز في ملف JavaScript الخاص بي.

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

قاعدة رمز جانب الخادم:

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();
هل كانت مفيدة؟

المحلول 2

قضيت يومًا لمعرفة ما هي القضية. لكن أخيرًا حصلت عليه.

لا أستطيع أن أقول إيفان مولوسكيإجابة خاطئة. حاولت مع رمزه حتى. لكن لا مساعدة. أخيرًا ، وجدت أن امتداد اسم الملف مفقود. أنا فقط إلحاق .pdf إلى testfile.

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

الآن أزلت ما يلي.

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

حتى مع عدم وجود رمز أعلاه ، أحصل على PDF كمرفق.

نصائح أخرى

أضف هذه الرؤوس:

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

سيؤدي ذلك إلى إجبار Internet Explorer على تنزيل الملف من الخادم.

وأنا أتفق مع مضاعفة. في الواقع المشكلة هي أنه إذا لم ينتهي "اسم الملف" باللاحقة المرتبطة بقارئ Acrobat في Windows. بمجرد إضافة ".pdf" فهي تعمل بشكل جيد.

ثم هناك pitfal من Cache-Control: no-cache مما سيؤدي إلى دكتوراه. يستخدم Cache-control: private لمنع التخزين المؤقت.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top