Làm cách nào để sử dụng loại MIME CSV?


125

Trong một ứng dụng web tôi đang làm việc, người dùng có thể nhấp vào liên kết đến tệp CSV. Không có tiêu đề nào được đặt cho loại mime, vì vậy trình duyệt chỉ hiển thị nó dưới dạng văn bản. Tôi muốn tệp này được gửi dưới dạng tệp .csv, vì vậy người dùng có thể trực tiếp mở tệp bằng calc, excel, gnumeric, v.v.

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

Mã này hoạt động như mong đợi trên máy tính của tôi (Không phải nó luôn như vậy sao?) Nhưng không hoạt động trên máy tính khác.

Trình duyệt của tôi là bản dựng hàng đêm của FF 3.0.1 (trên linux). Các trình duyệt mà nó không hoạt động là IE 7 và FF 3.0 (trên windows)

Có bất kỳ quirks tôi không biết?

Câu trả lời:


219

Bạn có thể thử buộc trình duyệt mở hộp thoại "Lưu dưới dạng ..." bằng cách thực hiện một số thứ như:

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

Mà nên làm việc trên hầu hết các trình duyệt chính.


12

Bạn không chỉ định ngôn ngữ hoặc khung, nhưng tiêu đề sau được sử dụng để tải xuống tệp:

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

5

Với Internet Explorer, bạn thường phải xác định tiêu đề thực dụng: tiêu đề công khai cũng như để tải xuống hoạt động bình thường ..

header('Pragma: public');

Chỉ 2 xu của tôi ..


5
Thực tế: công chúng không có ý nghĩa gì đối với Internet Explorer. (Tôi đã làm việc với thành phần được đề cập và tôi đã lấy nguồn).
EricLaw

Có thể tiện ích thực sự của việc này là để thay thế một tiêu đề thực dụng có sẵn từ trước: không có bộ đệm?
Doin

2

Mã này có thể được sử dụng để xuất bất kỳ tệp nào, kể cả 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" có nghĩa là "octet-stream"
EricLaw

2
Điều này có thể gây ra cảnh báo trong một số trình duyệt: Tài nguyên được hiểu là Tài liệu nhưng được chuyển bằng ứng dụng loại MIME / octet-stream
mikechuld
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.