2013-10-26 35 views
0

想获得文件的进度被复制无法获取文件拷贝进度

最初我送使用下面的代码复制文件的请求。一旦文件被创建。我发送响应成功= 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); 
    } 
    }); 
} 

FileUploadProgress.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 来设置进度。另外在客户端我已经请求了进度,但是wat得到的是成功= 0并且$ this-> progress是空的 我在代码中丢失了什么。请让我知道

+1

这并不是一件简单的工作,只用php来处理。 你必须明白,每次执行后,一切都会丢失。因此,在每个ajax调用中创建一个新的FileUploadProgress实例,女巫无法访问先前的实例属性,将其视为每个ajax调用都启动一个新程序。 –

+0

好的!所以我可以在复制之前创建实例并将其作为响应发送回客户端。然后通过那个实例来获得进展? – nyfer

+0

@PoelincaDorin或可能我可以使用单例模式来检查是否只创建一个实例? – nyfer

回答

0

您必须让位来查询某些数据源以获取您的进度状态。 像一些数据库表或文件等倾销进度状态。

然而PHP有一些黑客,在某些环境中工作。
查阅以下文档:Session Upload Progress