当前位置: 首页 > 面试题库 >

检测下载是否完成

祝花蜂
2023-03-14
问题内容

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

我需要这个的原因:

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


问题答案:

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

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

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



 类似资料:
  • 问题内容: 检测下载是否完成的最佳方法是什么,因为此后我想更新数据库。 我尝试了PHP手册中的一些代码,但对我来说并没有多大作用: 问题答案: 但这并不能真正告诉您用户是否已完成下载。当 您 完成向用户发送字节后,它将告诉您,但它并没有说明用户实际收到了多少字节。 实际上,PHP(服务器端而非客户端语言)无法真正检测文件下载何时完成。最好的办法是在下载开始时将下载记录在数据库中。如果您绝对,完全和

  • 我正在使用Ruby和aws sdk从S3下载一个文件夹。如何检查每个文件是否已成功下载?这只是检查本地计算机上是否存在文件吗?

  • 所以我想知道,我想看看一个表是否已经被懒/急加载了,而没有在我检查时实际加载它。例如: 所以当我设置($this)时-

  • 问题内容: 我正在尝试检查用户单击按钮后是否已加载iframe。 我有 的HTML 有什么建议么? 顺便说一下,我的iframe是动态创建的。它不会随初始页面加载一起加载。 问题答案: 您可以尝试使用() 更新: 使用普通格式 更新: 您也可以尝试一下(动态iframe)

  • 我正在尝试检查用户单击按钮后是否加载了iframe。 我有 顺便说一下,我的iframe是动态创建的。它不会与初始页面加载一起加载。

  • 我知道在等待之后deadlock_timeout开始死锁检测,并中止事务。然而,我有一种情况,事务似乎停滞了几个小时(等待SELECT… for UPDATE),没有解决。我的日志确实显示postgres检测到一些死锁,但我想知道是否有可能有更复杂的死锁,postgres无法检测到?