Internet Explorer 9 не использует имя файла для встроенных вложений - PullRequest
6 голосов
/ 16 января 2012

Я использую этот код в сервлете, который устанавливает имя файла встроенного PDF-документа:

response.setContentType("application/pdf");
response.setContentLength((int) file.length());
response.setHeader("Content-disposition", "inline; filename=\"" + file.getName() + "\"");

Однако это не работает в IE 9: отображается только диалоговое окно «Сохранить как ...»последняя часть пути URL, за которой следует ".pdf" (для "/ some / url / invoice" это "invoice.pdf")

Это известная ошибка?Есть ли обходной путь?

1 Ответ

11 голосов
/ 16 января 2012

Это действительно поведение IE по умолчанию.Он никоим образом не использует атрибут filename заголовка Content-Disposition для подготовки имени файла по умолчанию для Сохранить как .Вместо этого он использует последнюю часть информации о пути URL запроса.

Я рекомендую переписать ваш сервлет и / или ссылки таким образом, чтобы требуемое имя файла предоставлялось как часть информации о пути запроса, а не, например, какпараметр запроса.

Таким образом, вместо

<a href="/pdfservlet">View PDF</a>

или

<a href="/pdfservlet?file=foo.pdf">View PDF</a>

необходимо использовать

<a href="/pdfservlet/foo.pdf">View PDF</a>

При отображении наШаблон URL /pdfservlet/*, вы можете при необходимости динамически захватить часть имени файла в сервлете следующим образом (например, чтобы найти нужный файл PDF и / или установить правильное значение filename в заголовке для более приличных веб-браузеров):

String filename = request.getPathInfo().substring(1); // foo.pdf

Это, между прочим, независимо от того, будет ли он встроенным или вложенным.

...