本问题已经有最佳答案,请猛点这里访问。

是否有这样的方法/方法/策略来检测文件下载是否完成?我的问题是这样的。

脚本:单击"报告生成器"按钮时,会出现一个加载轮图标,因为生成电子表格需要一段时间……现在,当下载完成并将电子表格保存到客户端计算机中时,加载轮图标仍在旋转。我想的唯一方法是检测下载是否完成,然后隐藏旋转的轮子,那么如何移除旋转的轮子呢?困惑:

在将我的问题标记为重复之前,请注意:当我按下按钮时,我正在电子表格中写入一个文件,然后自动/强制下载该文件。这不像是典型的静态文件下载

当用户请求下载时,为什么您仍然有一个旋转的轮子?纺车的出现向用户表明还有一些事情要做,但下载是最后一步。

浏览器有自己的下载管理器,它告诉用户下载完成的时间。你不需要自己动手。

试试看这里

@Remyabel是因为我正在从数据库中提取数据,数据量很大,然后将其写入电子表格中。当我单击"报告生成"按钮时,会出现旋转轮,因为完成报告生成需要5到10分钟,并自动弹出窗口来保存生成的文件。

可能您可以在窗口弹出之前使用javascript隐藏图标。

怎样?你能告诉我如何检测窗口何时弹出吗?

这种长时间运行的流程不太适合典型的Web请求/响应工作流。是的,它会起作用……但我相信存在问题,用户体验也不理想。我最好的工作流程是执行以下操作之一:

缓存报表。如果报告中的数据在周期(例如1天),然后设置一个cron以生成报告和然后将缓存的报告返回给用户。用户体验将立即下载。

如果需要动态生成报告,那么让用户请求报告并立即返回结果。稍后通过通知系统(假设他们在您的站点上有仪表板或其他东西)或电子邮件(请求报告时必须提供电子邮件地址)交付报告。

我认为这两个选项提供了更好的用户体验。

第二个选项有一些……"即时"的……这个报告生成的东西位于管理仪表板上,不能延迟……当他们按下生成报告按钮时,他们想要立即生成电子表格,可以等5到10分钟……还有其他想法吗?…如何在窗口弹出之前检测?正如@binu pandian在第一行回复中提到的那样

我发现像"不能延迟……他们希望电子表格立即"这样的要求通常可以得到更多的审查。例如,上述两种情况的交易准确性(最新数据)为及时性(交货速度)。选项1缓存数据。您的用户真的需要每次请求都生成这个报告吗?如果这一需求得到放宽,您将拥有一个更容易构建的系统。生成报告在服务器上听起来资源很重。有多少管理员可以同时访问这个?一些工程选择让…享受。

我会选择这个作为最好的答案,尽管它根本没有帮助我的问题,也许在另一个项目,它会有所帮助。

我同意Rcravens的回答,但将在选项2中添加以下内容:点击你的?下载?按钮,在服务器上调用电子表格的生成,并将其存储在temp目录中。通过Ajax(最好是WebWorkers),您可以通知用户生成正在进行中,并不断检查文件的状态。当检查和返回错误时,显示您的车轮。如果生成完成,请停止控制盘并通过javascript调用下载。

如果可以的话,如果你向用户展示你的电子表格生成的进度条,你的体验会更好,这样他就知道为什么要等多久了。

希望有帮助。