gpt4 book ai didi

javascript - 检测用户何时接受下载文件

转载 作者:数据小太阳 更新时间:2023-10-29 03:47:50 26 4
gpt4 key购买 nike

我想在用户单击允许他们下载文件的超链接后将用户重定向到另一个网页。但是,由于他们需要在打开/保存文件对话框中做出选择,我不想在他们接受下载之前重定向他们。

我如何检测到他们执行了此操作?

最佳答案

正如我多年维护 download.js 所发现的那样, 只是没有办法告诉 JS(或者一般情况下,见下文)用户选择使用下载打开/保存对话框做什么。这是一个常见的功能请求,多年来我反复研究过它。我可以自信地说,这是不可能的;如果有人可以演示一种机械方法来确定对任何文件的提示后用户操作,我将很乐意支付 10 倍的赏金!

此外,这不仅仅是 JS 规则的问题,浏览器下载和提示此类文件的方式使问题变得复杂。这意味着即使是服务器也不能总是告诉发生了什么。对于一些特定情况可能有一些特定的解决方法,但它们并不漂亮或简单。

您可以强制您的用户使用 <input type=file> 来“重新上传”已下载的文件验证它,但这充其量也很麻烦,而且本地文件浏览对话框可能会让某些人感到震惊。这是确保下载的唯一万无一失的方法,但对于非敏感应用程序来说,它非常严格,并且在某些缺乏文件支持的“移动”平台上不起作用。

您也可以尝试从服务器端观察,将文件在服务器上被命中的消息推送到客户端。这里的问题是,一旦打开/保存对话框出现,下载就会开始下载,尽管在后台是看不见的。这就是为什么如果您稍等片刻“接受”一个大文件,一开始它似乎下载得很快。从服务器的 Angular 来看,无论用户做什么,事件都是一样的。

对于一个巨大的文件,您可能会检测到整个文件没有传输,这意味着用户点击了“取消”,但这是一个将状态从后端推送到客户端的复杂同步过程。这将需要大量使用套接字、PHP 消息传递、EventSource 等的自定义编程,但收效甚微。这也是一场与时间的赛跑,而且是不确定的时间;并且不建议为了用户满意度而降低下载速度。

如果它是一个小文件,它会在用户看到对话框之前进行物理下载,因此服务器将毫无用处。还要考虑一些下载管理器扩展接管了这项工作,并且不能保证它们的行为与普通浏览器相同。强制等待对于硬盘驱动器缓慢的人来说可能是危险的,需要“永远”才能“完成”下载;我们都经历过这种情况,温和地说,在“旋转”风停时无法继续会降低用户满意度。

简而言之,没有简单的方法,也没有一般的方法,除了您知道需要很长时间才能下载的大文件。我花了很多血汗和泪水试图为我的 download.js 用户提供这种能力,但根本没有好的选择。 Ryan dahl 最初编写 node.js 是为了给他的用户提供一个上传进度条,也许有人会制作一个服务器/客户端包,以便轻松地为下载做同样的事情。

关于javascript - 检测用户何时接受下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41334881/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com