Як використовувати тип CSV MIME?


125

У веб-додатку, над яким я працюю, користувач може натиснути на посилання на файл CSV. Для типу mime немає заголовка, тому браузер відображає його як текст. Я хотів би, щоб цей файл був надісланий у форматі .csv, щоб користувач міг безпосередньо відкривати його за допомогою calc, excel, gnumeric тощо.

header('Content-Type: text/csv');
echo "cell 1, cell 2";

Цей код працює так, як очікувалося на моєму комп’ютері (чи не так це завжди?), Але не працює на іншому комп’ютері.

Мій браузер - це нічна збірка FF 3.0.1 (на Linux). Браузери, в яких він не працював, були IE 7 і FF 3.0 (для Windows)

Чи є якісь химерності, про які я не знаю?

Відповіді:


219

Ви можете спробувати змусити браузер відкрити діалогове вікно "Зберегти як ...", виконавши щось на зразок:

header('Content-type: text/csv');
header('Content-disposition: attachment;filename=MyVerySpecial.csv');
echo "cell 1, cell 2";

Що має працювати в більшості основних браузерів.


12

Ви не вказуєте мову чи рамки, але для завантаження файлів використовується наступний заголовок:

"Content-Disposition: attachment; filename=abc.csv"

5

За допомогою Internet Explorer вам часто доводиться вказувати загальнодоступний заголовок Pragma: public, щоб завантаження працювало належним чином.

header('Pragma: public');

Тільки мої 2 копійки ..


5
Прагма: public не має жодного значення для Internet Explorer. (Я працював над компонентом, про який йдеться, і я перебрав джерело).
EricLaw

Можливо, справжня корисність цього полягає в заміні вже існуючого заголовка Pragma: no-cache?
Зробити

2

Цей код можна використовувати для експорту будь-якого файлу, включаючи csv

// application/octet-stream tells the browser not to try to interpret the file
header('Content-type: application/octet-stream');
header('Content-Length: ' . filesize($data));
header('Content-Disposition: attachment; filename="export.csv"');

2
"octetstream" мається на увазі як "октет-потік"
EricLaw

2
Це може викликати попередження у деяких браузерах: Ресурс інтерпретується як Документ, але передається за допомогою програми MIME /
oktet
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.