小编典典

检测下载是否完成

ajax

我有一个非常简单和标准的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();
     ?>

我需要这个的原因:

对于我正在处理的项目,要求下载开始后,页面重定向到(或显示)“请等待下载完成”页面。然后,一旦完成,它应该重定向到(或显示)“您的下载已完成,谢谢”页面。我对其他可以达到相同结果的想法持开放态度。


阅读 193

收藏
2020-07-26

共1个答案

小编典典

查看描述解决方案的此Sitepoint论坛帖子

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

以下是描述使用AJAX轮询检测下载完成时间的完整线程:http
:
//www.sitepoint.com/forums/showthread.php?t=618233

2020-07-26