2013-10-26 37 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