PDF-файл, созданный по HTTP-запросу, не открывается в Internet Explorer

У меня есть сервлет, который на лету создает PDF-файл для ответа на основе некоторых параметров запроса. Когда я пытаюсь открыть/загрузить этот файл в IE, я получаю следующее сообщение:

"Невозможно загрузить [имя файла] с [сайта]. Невозможно открыть этот сайт в Интернете. Запрошенный сайт недоступен или не может быть найден. Повторите попытку позже".

Это то, что я установил в ответ:

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

response.setContentType("application/pdf");

С другими браузерами все работает нормально.

Обновление:

Я пробовал встроенный вместо вложения. Это откроет новое окно вместо диалогового окна открытия/сохранения (я бы предпочел иметь диалоговое окно), сообщение об ошибке исчезнет, ​​но новое окно просто пусто в IE. Все еще работает с другими браузерами.

Я пробовал простые, двойные и без кавычек имя файла, которое не содержит неэкранированных символов. Двойные кавычки и отсутствие кавычек не имеют значения, но к имени файла добавляются одинарные кавычки, чего я, конечно, не хочу.

Имя файла не содержит неэкранированных символов.

Я проверил тесты на этой странице, где говорится, что вложение с именем файла без кавычек передается для всех браузеров. Это то, что использовалось с самого начала.

Добавление заголовка Content-Lenght не имеет значения.

Кстати, Flying Saucer используется для создания PDF.


person Karine    schedule 27.09.2012    source источник


Ответы (5)


Я предлагаю взглянуть на http://greenbytes.de/tech/tc2231/, где перечислены все куча тестовых примеров того, как разные браузеры ведут себя с разными значениями заголовка Content-Disposition. Я предполагаю, что title содержит пробелы или какие-то другие специальные символы, которые необходимо экранировать, и IE в настоящее время ругается на неэкранированное значение.

person matt b    schedule 27.09.2012
comment
Спасибо, это очень полезно. Но тестовый пример, равный моему заголовку, проходит для всех браузеров. В заголовке также нет неэкранированных значений. - person Karine; 01.10.2012
comment
каково полное значение заголовка, который вы отправляете? И для отладки, какие все остальные заголовки ответов отправляются? - person matt b; 01.10.2012

Пробовали ли вы следующие заголовки:

response.setHeader("Content-Length", lenght);
response.setHeader("Content-Disposition", "inline; filename='" + filename + "'");

Имя файла должно быть исключено.

person azendh    schedule 27.09.2012
comment
Я попробовал это сейчас. Открывается новое окно, а сообщения об ошибке нет. Но в новом окне нет содержимого. По-прежнему нормально работает с другими браузерами. - person Karine; 28.09.2012

Это было какое-то время, но я подумал, что должен обновить это, так как решение было найдено.

Используемая CMS добавляла некоторые заголовки, которые я сначала не принял во внимание:

  • Кэш-Контроль: частный
  • Прагма: без кеша

Кажется, проблема с загрузкой с IE, если нет кэширования. Эти заголовки были изменены при обновлении CMS, и это решило проблему.

Пример:

  • Cache-Control: public, max-age=31536000
  • Дата: Чт, 06 декабря 2012 г., 14:14:14 по Гринвичу
  • Истекает: пятница, 06 декабря 2013 г., 14:14:14 по Гринвичу.
person Karine    schedule 25.09.2013

У меня была та же проблема, в итоге IE не будет обрабатывать код ответа 201 (все остальные браузеры обрабатывают его). Когда я изменил его на 200, IE загрузил файл просто отлично.

Это сообщение указало мне правильное направление.

person Marquee    schedule 31.05.2013

По приведенному ниже коду я могу получить PDF в браузере IE. response.setHeader("Content-Disposition", "attachment;filename=" + title + ".pdf");

Большое спасибо.

person Ashok    schedule 24.11.2014