2010-04-03 155 views
1

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

  1. 如何知道用户是否下载了文件或取消了它?
  2. 下载后我将当前页面重定向到另一个也没有发生。

请让我知道你是否有任何想法。 (我在的Joomla这样做)

问候, 沙湖

回答

4

这取决于你想要多大的麻烦去了一下。

只有这样,才能知道他们是否实际下载的文件是挂接到文件发送到客户端的行为  —因此,这意味着无论钩住的Joomla或任何潜在的Web服务器您正在使用,或使下载通过一个PHP页面,基本上只是从磁盘读取文件并将其发送出去。即使你这样做了,但你真正知道的是该文件是由浏览器请求的,并且你满足了请求。你不知道用户之后没有立即扔掉它。

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

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

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

+0

嗨, 非常感谢您的信息。 其实这一切对我来说都是很重要的。但我设法重定向发送头文件()以下载文件。 我用 - header(“refresh:2; url = index.php”); 2秒后重定向到index.php。 – user251336 2010-04-03 09:13:55

+0

@ user251336:啊,你去了。 :-) – 2010-04-03 09:35:11

相关问题