Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何检测文件下载是否已完成?_Php_Javascript_Jquery - Fatal编程技术网

Php 如何检测文件下载是否已完成?

Php 如何检测文件下载是否已完成?,php,javascript,jquery,Php,Javascript,Jquery,有没有这样的方式/方法/策略来检测文件下载是否完成了 情景: 单击“报告生成器”按钮时,会出现加载轮图标,因为生成电子表格需要一段时间……现在,当下载完成并将电子表格保存在客户机中时,加载轮图标仍在那里。。我想到的唯一移除旋转轮的方法是检测下载是否完成,然后隐藏旋转轮。那怎么做呢困惑的: 在将我的问题标记为重复之前请注意:当我按下按钮时,我正在电子表格中写入一个文件,然后自动/强制下载。这与典型的静态文件下载不同这种长时间运行的流程不适合典型的web请求/响应工作流。是的,它会工作…但我相信有问

有没有这样的方式/方法/策略来检测文件下载是否完成了

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


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

这种长时间运行的流程不适合典型的web请求/响应工作流。是的,它会工作…但我相信有问题,用户体验并不理想。我认为更好的工作流程是执行以下操作之一:

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

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


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

    我同意rcravens的答案,但会在选项2中添加以下内容: 通过单击»下载«按钮,您可以在服务器上调用电子表格的生成,并将其存储在临时目录中。通过AJAX(最好是webworkers),您可以通知用户正在生成文件,并不断检查文件的状态。在检查并返回false时,显示您的方向盘。如果生成完成,请停止控制盘并通过JavaScript调用下载

    如果可以,如果您向用户显示生成电子表格的进度条,让用户知道原因和等待的时间,体验会更好


    希望这会有所帮助。

    当用户请求下载时,为什么您仍然有一个旋转的轮子?旋转滚轮的存在向用户表明仍有一些事情要做,但下载是最后一步。浏览器有自己的下载管理器,可以告诉用户何时完成下载。你不需要自己做。试试看@remyabel这是因为我从数据库中提取数据,数据非常大,然后写在电子表格中。当我单击“报告生成”按钮时,会出现旋转的轮子,因为完成报告生成并自动弹出窗口保存生成的文件需要5到10分钟。您可以在窗口弹出之前使用javascript隐藏图标。第二个选项有一些内容..“动态”。此报告生成功能位于管理仪表板,不能延迟。他们希望在按下“生成报告”按钮时立即获得电子表格,他们可以等待5到10分钟。还有其他想法吗?…如何在窗口弹出之前检测?正如@Binu Pandian在第一条帖子的回复中提到的那样,我发现像“不能延迟……他们希望立即获得电子表格”这样的需求通常可以得到更多的审查。例如,上述两种情况在交易准确性(最新数据)和及时性(交付速度)方面都有所不同。选项一缓存数据。您的用户真的需要随每个请求生成此报告吗?如果这个需求被放宽,您将有一个更容易构建的系统。生成报告听起来在服务器上占用了大量资源。有多少管理员将同时访问此文件?做一些工程选择…享受。我会选择这个作为最好的答案,虽然它对我的问题毫无帮助,也许在另一个项目中它会有所帮助。