Как получить файл csv для загрузки в IE? Работает на firefox

Я борюсь с нечетной ошибкой. У меня есть простое веб-приложение, которое захватывает материал из БД и выводит его как загружаемый файл csv. Он работает на firefox и chrome, но IE не может распознать его как файл csv (думая, что это html fle), и когда я нажимаю save, я получаю сообщение об ошибке: «Не удалось загрузить {имя файла} из {name of site} Невозможно открыть этот интернет-сайт … "

Код:

session_start(); //some logic goes here... //generate csv header header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=exportevent.csv"); header("Pragma: no-cache"); header("Expires: 0"); echo "Event: " . $event_title . "\n"; //print the column names echo "Last Name, First Name, Company \n"; while($row = mysql_fetch_assoc($result)) { echo $row['atlname'] . ',' . $row['atfname'] . ',' . $row['atcompany'] . "\n"; } 

Я играл с контентом типа целой группы, но это не имело никакого эффекта.

Обновление: я пробовал использовать текст / csv, application / vnd.ms-excel (и варианты этого), текст / plain и некоторые другие, которые я теперь забыл без везения.

Это IE8 btw.

Обновление 2: соединение по SSL.

Related of "Как получить файл csv для загрузки в IE? Работает на firefox"

Разве мы не любим ИЭ? 🙂

Попробуйте использовать те заголовки:

  header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: private",false); header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"exportevent.csv\";" ); header("Content-Transfer-Encoding: binary"); 

Я думаю, что тип содержимого октетного потока заставляет IE загружать файл.

Мы недавно столкнулись с этой проблемой. См. Статью MSKB

Это заголовки, которые нам пришлось использовать, чтобы заставить работать SSL.

 header("Expires: Sat, 01 Jan 2000 00:00:00 GMT"); header("Last-Modified: " . gmdate("D, d MYH:i:s") . " GMT"); header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: public"); header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"$file_name\";"); header("Content-length: " . strlen($csv_string)); 

У меня был успех в следующем:

 header("Content-type: application/vnd.ms-excel"); header("Content-disposition: attachment; filename=File.csv"); 

Установка типа application / vnd.ms-excel, похоже, сделала трюк в моем случае. Это все в файле, который открывается, отправив форму, используя

 target="_blank" 

Единственным дополнительным кодом, который я должен был добавить для IE для работы с SSL, был: header("Pragma: public"); Итак, мои заголовки выглядят так:

  header("Pragma: public"); header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=some_filename.csv"); 

У нас была одна и та же проблема, и после добавления многих заголовков и получения рабочей ссылки я затем удалил их один за другим и нашел ключ для нас: «Cache-Control: public», поэтому в итоге мы просто

 header("Cache-Control: public"); header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=some_filename.csv"); 

который работал нормально.

Попробуйте установить свой тип контента в text/csv вместо application/octet-stream .

Поскольку application / octet-stream – это общий двоичный тип mime (и не соответствует расширению «.csv»), Internet Explorer может игнорировать его и вычислять тип mime на основе расширения файла.

Решение для меня было:

 header_remove(); header('Content-Type: text/csv'); header('Content-Disposition: attachment; filename=brokerlist.csv'); echo $content; 

Вы пробовали Content-type: text / csv?

Некоторое время назад у меня возникла проблема с открытием PDF-файлов IE6 и сбоем при установке AdobeReader 6.0 и попыткой открыть файл в окне браузера. Чем я нашел этот заголовок:

 header('Content-Type: application/force-download'); 

И он решил проблему, каждый PDF-файл был загружен и открыт в Adobe вместо IE.

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

  header("Pragma: public"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: public"); header("Content-Type: application/vnd.ms-exce"); header("Content-Disposition: attachment; filename=coupons.csv" ); header("Content-Transfer-Encoding: binary"); header("Content-Length: " . strlen($csv)); echo $csv; die(); 

Одна вещь, которую я сделал, – это очистить кеш за каждое свободное время, которое я тестирую. И это все еще не имеет смысла. На всякий случай кому-то может понадобиться это отчаянно;)

После использования Javascript он решит вашу проблему.

Используйте это для IE,

  var IEwindow = window.open(); IEwindow.document.write('sep=,\r\n' + CSV); IEwindow.document.close(); IEwindow.document.execCommand('SaveAs', true, fileName + ".csv"); IEwindow.close(); 

Для получения дополнительной информации я написал учебник по этому поводу, см. – Загрузка данных JSON в формате CSV Поддержка кросс-браузера

Надеюсь, это будет полезно для вас.

Если вы пытаетесь выполнить эту задачу (получение файла CSV для загрузки в IE8) с помощью Salesforce.com (в этом случае ваш front-end – Visualforce, и вы не можете установить все заголовки, только некоторые из них), здесь что вам нужно:

 <apex:page cache="true" contentType="application/octet-stream#myAwesomeFileName.csv" showHeader="false" sidebar="false" standardStylesheets="false"> <apex:outputText value="{!csvContent}" escape="false"/> </apex:page> 

Ключевыми элементами здесь являются cache=true , который в сочетании с атрибутом expires=0 по умолчанию достигает следующих заголовков:

 header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: public"); 

И затем contentType application/octet-stream — выполнение text/csv не выполняется для IE8.