如何知道用户是否下载了文件?

时间:2010-04-03 07:36:16

标签: php download

我有一个功能,用户可以下载文件。 它工作正常。但是 -

  1. 如何知道用户是下载了文件还是取消了文件?
  2. 下载后,我将当前页面重定向到另一个也没有发生的页面。
  3. 如果你们中的任何一个人有任何想法,请告诉我。 (我在Joomla这样做)

    此致 沙湖

1 个答案:

答案 0 :(得分:4)

这取决于你想要多少麻烦。

了解他们是否实际下载了文件的唯一方法是挂钩将文件传输到客户端的行为 - 这意味着要么挂钩到Joomla或任何底层Web服务器你是使用,或通过PHP页面进行下载,该页面基本上只是从磁盘读取文件并将其发送出去。但即使您这样做,您真正知道的是该文件是由浏览器请求的,并且您满意了该请求。你不知道用户之后不会立即扔掉它。

就完成时显示重定向而言,如果按照上述方式挂钩进程,则可以设置会话变量,标记文件是否已下载(例如,在发送最后一个字节后)。您可以使用Ajax定期查询该会话标志的状态,如果标志返回true,则使用JavaScript在客户端上执行重定向。

如果你需要知道的是他们开始下载,你可以使用cookie机制。发送回文件时,请在响应中添加cookie。 (您可以通过按照上面的方式通过PHP文件汇集下载来实现此目的,或者如果您的Web服务器具有高度可配置性 - 例如,Apache可以执行此操作 - 您可以将其配置为自动添加cookie。)您的页面等待看看他们是否下载了文件(或至少已启动下载文件)使用JavaScript定期检查cookie(而不是轮询服务器),这样可以减少流量。 This question and answer谈到了(稍微)更详细的说法。我在一个应用程序中执行此操作,其中服务器自定义构建大型PDF或ZIP以供下载:我在请求文件时显示“构建”div,然后轮询cookie,并在cookie时删除“构建”div出现。在主流浏览器中,cookie会在浏览器显示框询问是否将文件保存到磁盘或打开它时显示,因为两者都是由响应返回触发的。

如果以上是太麻烦(对于某些用例,我认为可能会这样),您可以在下载链接上放置一个JavaScript click事件处理程序。这会告诉你他们点击了这个链接,但并没有真正告诉你其他的东西。