IE8 Проблема: PDF-файл отображается как встроенный - PullRequest
1 голос
/ 29 ноября 2010

Я загружаю PDF с моего сервера.Я установил «Content-Disposition» как «вложение».Очень хорошо работает Firefox.Но в IE8 он отображается как встроенный.Какие-нибудь быстрые указатели, чтобы решить эту проблему?

Редактировать:

Я использую Springs для записи потока байтового массива 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();

Ответы [ 3 ]

2 голосов
/ 02 декабря 2010

Я потратил день, чтобы выяснить, в чем проблема. Но, наконец, я понял.

Я не могу сказать, что ответ Эвана Мулавски неправильный. Я попробовал с его кодом даже. Но не поможет. Наконец я обнаружил, что расширение имени файла отсутствует. Я только что добавил .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 в виде вложения.

2 голосов
/ 29 ноября 2010

Добавьте эти заголовки:

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 загрузить файл с сервера.

1 голос
/ 04 октября 2011

Я согласен с мультиплексором.На самом деле проблема в том, что если имя файла не заканчивается суффиксом, связанным с Acrobat Reader в Windows.Как только вы добавляете «.pdf», все работает нормально.

Затем появляется питфал Cache-Control: no-cache, который вызывает тошноту IE.Используйте Cache-control: private для предотвращения кеширования.

...