Как я заставляю файл CSV загружать на IE? Работы над Firefox

Я борюсь с нечетной ошибкой. У меня есть простое веб-приложение, которое захватывает материал от DB, тогда производит его как загружаемый файл CSV. Это работает над Firefox и хромом, но IE не удается распознать его как файл CSV (думающий, что это - HTML fle), и когда я нажимаю, сохраняют, я получаю ошибку, "Неспособный загрузить {название файла} от {название сайта}. Неспособный открыть этот сайт...."

Код:

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";      
}

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

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

Это - IE8 btw.

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

34
задан tau-neutrino 9 February 2010 в 22:04
поделиться

6 ответов

Разве мы не любим IE? :)

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

  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 загружать файл.

56
ответ дан 27 November 2019 в 16:40
поделиться

Мне удалось добиться следующих результатов:

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

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

target="_blank"
4
ответ дан 27 November 2019 в 16:40
поделиться

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

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

1
ответ дан 27 November 2019 в 16:40
поделиться

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

-1
ответ дан 27 November 2019 в 16:40
поделиться

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

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

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

-1
ответ дан 27 November 2019 в 16:40
поделиться

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

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

header("Expires: Sat, 01 Jan 2000 00:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H: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));
6
ответ дан 27 November 2019 в 16:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: