如何获取要在 IE 上下载的 csv 文件?适用于火狐浏览器

2022-08-30 13:38:44

我正在与一个奇怪的错误作斗争。我有一个简单的Web应用程序,可以从数据库中获取内容,然后将其输出为可下载的csv文件。它适用于firefox和chrome,但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(以及此变体),text / plain以及其他一些我现在忘记而没有运气的人。

顺便说一句,这是IE8。

更新 2:连接通过 SSL 进行。


答案 1

我们不喜欢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下载该文件。


答案 2

我们自己最近遇到了这个问题。请参阅此 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));

推荐