如何获得csv文件在IE上下载? 适用于Firefox

我挣扎着一个奇怪的错误。 我有一个简单的Web应用程序,从数据库中抓取的东西,然后输出它作为一个可下载的CSV文件。 它工作在Firefox和铬,但IE浏览器无法识别为CSV文件(认为这是一个HTML文件),当我点击保存时,我得到的错误,“无法下载{名称的文件名} {名称的网站}无法打开这个网站…“

码:

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。

我们不喜欢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"); 

我认为八位字节stream内容types迫使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"); 

设置types为application / vnd.ms-excel似乎在我的情况下做的伎俩。 这是通过提交表单打开的文件

 target="_blank" 

我唯一需要为IE添加额外代码的是: header("Pragma: public"); 所以我的标题看起来像这样:

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

我们刚刚有同样的问题,并添加了许多头后,得到一个工作链接,然后我把它们逐一删除,发现我们的关键之一是“caching控制:公共”,所以最后我们只是有

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

哪些工作正常。

尝试将您的内容types设置为text/csv而不是application/octet-stream

因为application / octet-stream是一个通用的二进制MIMEtypes(并且不匹配'.csv'扩展名),因此Internet Explorer可能会忽略它并根据文件扩展名计算MIMEtypes。

我的解决scheme是:

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

您是否尝试过Content-type:text / csv?

前段时间我用IE6打开pdf文件出现问题,安装AdobeReader 6.0时崩溃,并试图在浏览器窗口中打开文件。 比我find这个标题的地方:

 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(); 

我做的一件事情是在testing代码的每一个惊吓时间清空caching。 而且它仍然没有意义。 以防万一有人可能需要这个拼命的;)

使用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(); 

欲了解更多信息,我写了教程,请参阅 – 以CSV格式下载JSON数据跨浏览器支持

希望这会对你有所帮助。

如果你正在使用Salesforce.com来完成这个任务(在IE8中获得一个CSV文件的下载)(在这种情况下,你的前端是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"); 

然后application/octet-stream – 对text8 text/csv做IE8失败。