Проблема открытия документов Excel с помощью Internet Explorer - PullRequest
2 голосов
/ 05 марта 2009

Я столкнулся с проблемой, из-за которой IE не открывает диалоговое окно Сохранить как / Открыть для документа Excel, как это делает Firefox.

Итак, я создал фильтр сервлетов, который использует * .xls в качестве шаблона URL. Проблема, с которой я сейчас сталкиваюсь (поскольку это первый фильтр, который я создал), заключается в том, как получить имя файла, который хочет пользователь, чтобы диалоговое окно заполнялось правильно. В настоящее время фильтр вызывается, когда пользователь выбирает ссылку на заданной странице.

Вот что я придумал:

Это то, что у меня есть doFilter ().

String fileName = "fileName.xls";

HttpServletRequest httpRequest = (HttpServletRequest) pRequest;
String requestURI = httpRequest.getRequestURI();

if(StringUtils.isNotBlank(requestURI))
{
  String uri[] = StringUtils.split(requestURI, '/');
  fileName = uri[uri.length - 1];
}

HttpServletResponse httpResponse = (HttpServletResponse) pResponse;
httpResponse.setContentType("application/vnd.ms-excel");
httpResponse.setHeader("Content-disposition", "attachment; filename=\"" + fileName +"\"");

web.xml:

<filter>
    <filter-name>ExcelFilter</filter-name>
    <filter-class>vsg.rp.common.ExcelFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>ExcelFilter</filter-name>
    <url-pattern>*.xls</url-pattern>
</filter-mapping>

Это все работает над моей коробкой разработки: Windows XP, JBoss, Eclipse, Oracle. Но когда он работает на тестовом сервере - Linux, Apache / JBoss, Oracle - он не работает. Похоже, что фильтр даже не вызывается, не выдается никаких ошибок и т. Д. Есть идеи относительно того, почему это произойдет?

Ответы [ 3 ]

5 голосов
/ 05 марта 2009

Вы хотите, чтобы тип контента был установлен соответствующим образом, а также заголовок расположения контента, таким образом:

response.setContentType ( "применение / vnd.ms-Excel");
response.setHeader ( "Content-Disposition", "attachment; filename = \" "+ filename + "\" ");

1 голос
/ 05 марта 2009

Используйте HTTP-заголовок Content-Disposition и установите для него что-то вроде:

attachment; filename=myworkbook.xls

Это статья базы знаний Майкрософт , посвященная этой проблеме. И вот пример установки Content-Disposition в коде Java .

0 голосов
/ 05 марта 2009

В дополнение к настройке заголовков для типа контента, вы также должны убедиться, что сервер НЕ сообщает браузеру НЕ кэшировать файл.

В земле IE, если вы скажете IE не кэшировать файл, он с радостью загрузит файл ... затем попытается открыть файл из каталога, в котором он сохранил файл ... Однако, поскольку заголовки сказали "не" t кеширует «он принимает это буквально и не сохраняет файл, поэтому Excel выдает ошибку, говорящую:« Нет файла! ».

Короче говоря, скажите IE, чтобы кэшировать файл .

...