检测下载是否完整

时间:2011-02-05 07:20:01

标签: php javascript ajax dom mootools

我有一个非常简单和标准的PHP强制下载脚本。

如何检查下载是否/何时完成以便在客户端通知用户?我甚至不需要实时显示进度,我只对特定事件感兴趣:“下载完成时”。基于我的研究,似乎必须从服务器端确定,因为没有ondownloadready事件,我认为不可能拦截浏览器事件。

所以看起来我最好的选择是将发送到总字节数的字节与某种客户端/隔离交互进行比较。我如何检查从服务器发送的用于PHP强制下载的字节?是否有某种全局PHP变量存储这些我可以用AJAX ping的数据?

    <?php

    header("Content-Type: video/x-msvideo");
    header("Content-Disposition: attachment; filename=\"".basename($realpath)."\";");

    ...

    $chunksize = 1 * (1024 * 1024); // how many bytes per chunk
    if ($size > $chunksize) {
           $handle = fopen($realpath, 'rb');
           $buffer = '';
           while (!feof($handle)) {
                 $buffer = fread($handle, $chunksize);
                 echo $buffer;
                 ob_flush();
                 flush();
           }
          fclose($handle);
     }             
     else {
         readfile($realpath);
     }
     exit();
     ?>

我需要这个的原因:

对于我正在处理的项目,需要在下载开始后,页面重定向到(或显示)“请等待下载完成”页面。然后,一旦完成,它应该重定向到(或显示)“你的下载完成,谢谢”页面。我愿意接受能够达到同样结果的其他想法。

1 个答案:

答案 0 :(得分:1)

查看描述解决方案的Sitepoint Forum Post

基本上,一旦while循环中断,你就完成了!

以下是描述使用AJAX民意调查来检测下载完成时间的完整主题:http://www.sitepoint.com/forums/showthread.php?t=618233