尽管浏览器预取/缓存,如何判断文件是否真的已下载并保存?

时间:2011-05-02 10:21:44

标签: php javascript html browser download

我正在创建一个脚本来保存下载统计信息,但我只想在文件被实际下载时更新统计信息。

问题是浏览器(例如,Explorer 9,Chrome,...)会在“保存/打开”对话框仍处于打开状态时自动开始下载文件。这意味着在用户指定保存位置之前(或者Explorer仍然显示黄色警告栏),文件可以完全下载(在我假设的浏览器指定的临时目录中)。

即使文件已成功下载,用户也可以决定取消保存。如何告诉浏览器不要自动开始下载?有些HTTP标头可能吗? 还有其他解决方案吗?

3 个答案:

答案 0 :(得分:3)

你无法做你想做的事。这是不可能的,至少在你问的方式。

可以做的事情是在安装程序中放入一些代码,这些代码在运行时会延伸到您的服务器,然后您的脚本可以跟踪它。这通常已经完成,但肯定万无一失。很多人下载软件并离线安装。 (特别是拨号用户,数千人仍在那里。)此外,无法保证安装程序不会被防火墙软件阻止。

所以这一切都取决于你在安装时需要知道的糟糕程度。如果它很重要,那么安装程序需要在安装之前验证服务器。当然,这可以被攻击,你无能为力。但是,我怀疑它会适用于您的目的。

另外,不要忘记每次下载多次安装。

答案 1 :(得分:0)

我认为你不能看到这一点。在将软件发送给客户之前,您必须让某人为软件付费。

我建议你让网站记住购买,所以如果在下载过程中出现问题,用户可以重试,无需再次付款(或联系管理员)。

答案 2 :(得分:0)

好吧,有一些中间页确认“是的,我想下载这个”可能主要是取消已取消的下载。

现在,我不确定这是完全可能的,但您可能尝试通过PHP提供文件,而不是Apache的典型下载。在PHP中,您可以使用readfile从PHP脚本提供文件。因此,您可以调用readfile,flush并确定所服务的字节数。如果它不等于文件中的字节数,则会被中断。我不确定readfile是否像那样工作,但它值得尝试。

注意,仍然无法修复Marcel提到的内容,即在临时文件下载完成之前点击“取消”。