1

我想让用户输入一个日期范围,然后能够下载一个 Excel 文件,其中包含基于该日期范围检索的数据。

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

这行得通。但是,我想包含一个进度指示器,一旦发送数据就会消失。但是我找不到这样做的方法。

当按下表单提交按钮时,我可以启动这样的指示器,但是一旦输出文档以供下载,我就找不到关闭它的方法。

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

谁能建议如何做到这一点?我在这里看到了关于将输出加载到隐藏 iframe 的建议,但我自己不明白如何执行此操作。

4

1 回答 1

2

因为我没有可以作为基础的代码,所以我将主要为您写理论。

用户请求下载文件

您加载一个页面,在其中创建文件,该过程需要一些时间,在此期间您向用户显示进度条。

而不是把这个文件扔给带有标题功能的用户(你不能使用它,因为你已经在屏幕上打印了)你将文件保存到一个临时目录中。最好用随机名称或时间戳来调用它。

在文件创建结束时,在屏幕上打印一个 JavaScript 命令,如下所示:

<script language=”JavaScript”&gt;
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直接设置到文件中,浏览器会直接下载它。但是你需要某种垃圾收集器来清理所有这些创建的文件......这会很混乱......

于 2012-12-14T00:46:02.803 回答