【问题标题】:how to detect if the downloading of the file has finished? [duplicate]如何检测文件的下载是否完成? [复制]
【发布时间】:2013-09-11 13:25:54
【问题描述】:

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

场景: 单击报告生成器按钮时,会出现一个加载轮图标,因为生成电子表格需要一段时间......现在,当下载完成并将电子表格保存在客户端机器中时,加载轮图标仍然在旋转..我想删除那个纺车的唯一方法是检测下载是否完成,然后隐藏纺车..那怎么办? :困惑:

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

【问题讨论】:

  • 当用户请求下载时,你为什么还有一个旋转的轮子?旋转轮的存在向用户表明仍有一些事情要做,但下载是最后一步。
  • 浏览器有自己的下载管理器,下载完成后会告诉用户。你不需要自己做。
  • 试试看here
  • @remyabel 这是因为我从数据库中提取数据并且它非常庞大,然后将其写入电子表格......当我点击报告生成按钮时,它会出现纺车,因为它需要 5 到10分钟完成报告生成并自动吐出窗口保存生成的文件
  • 也许你可以在窗口弹出之前使用javascript隐藏图标。

标签: php javascript jquery


【解决方案1】:

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

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

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

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

【讨论】:

  • 第二个选项有一些东西..“即时”..这个报告生成东西位于管理仪表板,不能延迟..他们希望电子表格在他们推送生成时立即报告按钮,他们可以等待 5 到 10 分钟..还有其他想法吗?...如何在窗口弹出之前检测?正如@Binu Pandian 在第一条回复中提到的那样
  • 我发现像“不能延迟......他们想要立即使用电子表格”这样的要求通常可以进行更多审查。例如,上述两种情况以准确性(最新数据)换取及时性(交付速度)。选项一缓存数据。您的用户真的需要每个请求都生成此报告吗?如果放宽该要求,您将拥有一个更容易构建的系统。生成报告听起来服务器上的资源很重。有多少管理员会同时访问它?一些工程选择……享受吧。
  • 我会选择这个作为最佳答案,尽管它对我的问题没有任何帮助,也许在不同的项目中会有所帮助。
【解决方案2】:

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

如果可以的话,如果您向用户显示电子表格生成的进度条,体验会更好,这样他就知道自己等待的原因和等待时间。

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2023-04-10
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    • 2019-09-15
    • 2015-09-28
    • 1970-01-01
    • 2010-12-06
    相关资源
    最近更新 更多