我想允许用户输入日期范围,然后能够下载基于该日期范围检索到的数据的Excel文件。
最初我通过将表单作为同一页面的GET请求提交来完成此工作。如果存在GET参数,页面将检索数据并输出所需的标题然后输出数据。然后我会从进程中exit;
来阻止页面加载(因为我必须使用Excel数据发送标题)。
这很有效。但是我希望包含一个进度指示器,一旦数据发送就会消失。但是我找不到办法做到这一点。
我可以在按下表单提交按钮时启动这样的指示器,但是在输出文件进行下载后我找不到关闭它的方法。
Ajax在这种情况下不起作用,顺便说一句。
有人可以建议怎么做吗?我在这里看到关于loading the output into a hidden iframe的建议,但我不明白自己该怎么做。
答案 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设置为该文件,浏览器将直接下载。但是,你需要某种垃圾收集器来清理所有这些创建的文件......它会很混乱......