Тип MIME / Content-type для открытия файлов CSV с использованием Excel в IE и Firefox

У меня возникла проблема с получением CSV-вывода для распознавания и открытия в Excel. В моем веб-приложении у меня есть Java-сервлет, который возвращает результаты поиска пользователю. Результаты поиска доставляются сервером Apache Solr. В интерфейсе GUI есть опция, которая позволяет пользователю запрашивать результаты поиска в формате «CSV». Если этот параметр выбран, запрос повторно запускается против Solr, добавив параметр «wt = csv». Затем java-фильтр добавляет заголовки для возврата результатов в формате CSV-форматированного текста. Но он работает неправильно.

  • В IE (версия 8.0) мне предлагается «Открыть» или «Сохранить» файл. Если я выберу «Открыть»; он просто сбрасывает текст в формате CSV на экране вместо того, чтобы открывать его в Excel. И если я выберу «Сохранить»; Я получаю сообщение об ошибке – «Невозможно открыть этот интернет-сайт. Запрошенный сайт недоступен или не может быть найден. "
  • В Firefox (версия 10.0.9) также; Мне будет предложено открыть или сохранить файл. Но для открытия файла CSV; по умолчанию опция Notepad & Excel даже не указана. Если я нажму «Сохранить», то он загрузит файл CSV, и я могу открыть его в Excel, и он будет правильно распознан Excel.

Я пробовал различные заголовки и комбинации –

//((HttpServletResponse)response).setHeader("Content-Type", "application/octet; charset=utf-8"); ((HttpServletResponse)response).setHeader("Content-Type", "text/csv"); //((HttpServletResponse)response).setHeader("Content-Type", "application/vnd.ms-excel"); //((HttpServletResponse)response).setHeader("Cache-Control", "private, private,max-age=0,must-revalidate"); //((HttpServletResponse)response).setHeader("Content-Encoding", "gzip"); //((HttpServletResponse)response).setHeader("Content-Encoding", "binary"); ((HttpServletResponse)response).setHeader("Content-Disposition", "attachment; filename=Download.CSV"); //((HttpServletResponse)response).setHeader("Content-Disposition", "inline; filename=Download.CSV;"); 

Но никто из них, похоже, не работает. Я использовал Firefox для проверки заголовков, которые отправляются обратно, и я вижу следующее:

Content-Disposition: вложение; имя файла = Download.CSV

Content-Type: текст / равнинный, кодировка = UTF-8

Сервер: Jetty (7.xy-ПАНОРАМА)

Transfer-Encoding: фрагментированный

Vary: Accept-Encoding

Даже если тип содержимого указан как csv или excel; когда он доходит до браузера, он интерпретируется как текстовый / простой, и я думаю, что это проблема. Не знаете, какой заголовок или кодировку я должен установить? Какие-либо предложения? Благодарю.

Я делаю что-то подобное, и это часть кода, который я использую:

  Date dt = new Date(); SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd_HHmmss"); String filename = fmt.format(dt) + ".csv"; //Setup the output String contentType = "application/vnd.ms-excel"; FacesContext fc = FacesContext.getCurrentInstance(); HttpServletResponse response = (HttpServletResponse)fc.getExternalContext().getResponse(); response.setHeader("Content-disposition","attachment; filename=" + filename); response.setContentType(contentType); 

Обратите внимание, что я использую переменную «contentType», чтобы сообщить сервлету, какой файл будет сгенерирован.

Надеюсь, это сработает для вас.

Interesting Posts

textbox_exit в обходном режиме динамического управления vba

Открыть приложение WPF из проекта Excel VSTO

Необходимо понимать fomula re: excel искать строку в таблице и возвращать строку, если true

Excel VBA – Ошибка выполнения 1004 (RefreshAll не работает)

Чистая функция в excel

Скопируйте определенные данные из одной книги и вставьте ее в другую книгу (вставьте из второй строки)

Вставка фиксированной даты в состояние в Excel

excel vba метод объекта _workheet не удалось

Попытка динамически передавать параметры хранимой процедуре из excel 2013, вызывая универсальный мэйнфрейм DB2

Получение конкретной ценности с веб-сайта с помощью excel vba

Определить тип файла MS Excel с помощью Apache POI

Проверка данных по умолчанию

Excel VBA: фильтровать и копировать из 5 верхних строк / ячеек

Почему CDate («0/5/14») возвращается 5/14/2000?

Как читать форматированный дисплей ячейки datetime с использованием python

Давайте будем гением компьютера.