无法获得文件复制进度

Posted

技术标签:

【中文标题】无法获得文件复制进度【英文标题】:Not able to get file copying progress 【发布时间】:2013-11-05 11:12:34 【问题描述】:

我正在尝试获取正在复制的文件的进度

最初我使用下面的代码发送一个复制文件的请求。一旦创建了文件。我发送响应 success=1 并开始复制过程并调用 getProgress

   $.ajax(
     url:'copyFile.php',
     type: 'post',
     dataType: 'json',
     data: 'data':someData, 
     success: function(data) 
       if(data.success)
         progressIndex=setInterval(getProgress, 1000 );
       
     ,
     error:function(err)
      console.log(err);
     
   );


    function getProgress()
    $.ajax(
     url:'FileUploadProgress.php',
     type: 'post',
     dataType: 'json',
     data: 'progress':'1', 
     success: function(data) 
       if(!data.success)
        clearTimeout(progressIndex);
       
     ,
     error:function(err)
      console.log(err);
     
   );

文件上传进度.php

class FileUploadProgress
   private $filename;
   private $progress;

 public function setfileProgress($filename,$progress)
    $this->filename=$filename;
  $this->progress=$progress;
  

function returnProgress()
   if(empty($this->filename) || empty($this->progress))
     echo json_encode(array('success'=>'0'));
   else
echo json_encode(array('success'=>1,'filename'=>$this->filename,'progress'=>$this- 
>progress));




  $fileuploadprogress=new FileUploadProgress;
  if($_POST['progress'])

      $fileuploadprogress->returnProgress();
 

在复制时获取进度并调用函数setfileProgress 设置进度。同样在客户端,我已请求进度,但我得到的是成功 = 0 并且 $this->progress 为空 我的代码中是否缺少任何内容。请告诉我

【问题讨论】:

这不是一个单独使用 php 的简单工作。您必须了解,每次执行后一切都会丢失。因此,在每次 ajax 调用时都会创建一个新的 FileUploadProgress 实例,而女巫无法访问之前的实例属性,可以将其视为每次 ajax 调用时都会启动一个新程序。 好的,是的!所以我可以在复制之前创建实例并将其作为响应发送回客户端。然后传递那个实例来获取进度? @PoelincaDorin 或者我可以使用单例模式来检查是否只创建了一个实例? 单例模式仅适用于当前请求,正如我之前提到的,您需要一个后台服务来查询,或者正如 Nagh 提到的,使用 Session 女巫在请求中是持久的。 【参考方案1】:

您必须让路来查询一些数据源以获取您的进度状态。 比如在一些数据库表或文件中转储进度状态等。

但是 PHP 有一些技巧,可以在某些环境中使用。 检查以下文档:Session Upload Progress。

【讨论】:

以上是关于无法获得文件复制进度的主要内容,如果未能解决你的问题,请参考以下文章

progressbar怎么显示复制进度

大文件复制过程中的进度(复制项目和写入进度?)

MySQL如何复制到移动硬盘上

进度条和文件复制问题?

复制文件时显示进度百分比

使用进度在 Windows 命令行上复制文件