下载Excel文件以响应提交表单

时间:2012-12-13 23:19:29

标签: php javascript

我想允许用户输入日期范围,然后能够下载基于该日期范围检索到的数据的Excel文件。

最初我通过将表单作为同一页面的GET请求提交来完成此工作。如果存在GET参数,页面将检索数据并输出所需的标题然后输出数据。然后我会从进程中exit;来阻止页面加载(因为我必须使用Excel数据发送标题)。

这很有效。但是我希望包含一个进度指示器,一旦数据发送就会消失。但是我找不到办法做到这一点。

我可以在按下表单提交按钮时启动这样的指示器,但是在输出文件进行下载后我找不到关闭它的方法。

Ajax在这种情况下不起作用,顺便说一句。

有人可以建议怎么做吗?我在这里看到关于loading the output into a hidden iframe的建议,但我不明白自己该怎么做。

1 个答案:

答案 0 :(得分:2)

因为我没有可以依据的代码,所以我会主要向你写这个理论。

用户下载文件的请求

如果您在创建文件的内部加载了一个页面,则该过程需要一些时间,在此期间您会​​向用户显示一个进度条。

而不是将此文件传递给具有标题功能的用户(由于您已经在屏幕上打印而无法使用),您将文件保存到临时目录中。最好用随机名称或时间戳来调用它。

在文件创建结束时在屏幕上打印一个这样的JavaScript命令:

<script language=”JavaScript”>
self.location=”download.php?file=whatever_you_called_it.xls”;
</script>

使用以下内容设置Excel下载的标题:

header('Content-disposition: attachment; filename=your_excel_file.xls');
header('Content-type: application/xls');
readfile('tmp_dir/whatever_you_called_it.xls');

unlink ('tmp_dir/whatever_you_called_it.xls'); 

总是很好地清理自己之后的东西。请注意,某些内容可能不会被删除。所以最好还是有垃圾收集器。并将文件保存在公共目录之外

显然,如果数据不敏感,那么您可以直接将javascript设置为该文件,浏览器将直接下载。但是,你需要某种垃圾收集器来清理所有这些创建的文件......它会很混乱......