【发布时间】:2013-01-16 19:14:45
【问题描述】:
我正在使用 jQuery 来识别单击按钮,然后触发对文件的调用:
window.location.href = "url";
此文件查询数据库,返回结果,然后将其写入 CSV 文件。我设置了以下标题:
header('Content-Type: text/csv;');
header('Content-Disposition: attachment; filename=data.csv');
这适用于除 Chrome 之外的所有浏览器,它在控制台日志中返回以下错误“资源解释为文档但使用 MIME 类型文本/csv 传输:“url””。
奇怪的是,如果我直接调用该文件,它可以在所有浏览器中运行。
代码:
$fp = fopen('php://output', 'w');
header('Content-Type: text/csv;');
header('Content-Disposition: attachment; filename=data.csv');
header("Expires: 0");
header("Cache-control: private");
//Field Headers
$ncols = oci_num_fields($stid);
$headers_row = array();
for ($i = 1; $i <= $ncols; ++$i) {
$headers_row[] = oci_field_name($stid, $i);
}
while ($row = oci_fetch_array($stid, OCI_NUM+OCI_RETURN_NULLS)) {
if(!empty($row)){
if(!empty($headers_row)){
fputcsv($fp, $headers_row);
$headers_row = '';
}
fputcsv($fp, $row);
}
}
fclose($fp);
oci_close($conn);
有人有什么想法吗?
【问题讨论】:
-
您在查询部分使用了任何 SESSION 变量?
-
@KasparMary 不,它使用 GET。
-
chrome不允许下载吗?在 chrome 中,我将此作为警告,而不是错误。不知道如何修复它,但我仍然可以下载我的文件。
-
三年后,这仍然是一个有效的问题。 Chrome 仍然会给出这个警告。我在单击按钮时使用 window.location.replace(url) 重定向到 csv 文件时得到它。就我而言,后端是 .NET。就像@DonRhummy 一样,我只是在开发者控制台中收到一条警告,但文件下载正常。
-
如果你真的想保存文件,我觉得重定向到一个文件是 hacky。你试过Downloads API吗?
标签: php google-chrome csv mime-types