如何获得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失败。