2012-02-16 77 views
1

我想上傳大文件到我的服務器,但我希望能夠休息(例如,用戶必須能夠關閉他的電腦,並在重新啓動後繼續)上傳過程。帶中斷文件上傳

我想我可以處理客戶端上傳,但我不知道如何使服務器端。在服務器端實現它的最佳方式是什麼? PHP能做到嗎? PHP是最高效的嗎?

非常感謝

回答

0

如果你能做到客戶端確實張貼在塊的文件,你可以做這樣的事情在服務器端:

// set the path of the file you upload 
    $path = $_GET['path']; 
    // set the `append` parameter to 1 if you want to append to an existing file, if you are uploading a new chunk of data 
    $append = intval($_GET['append']); 

    // convert the path you sent via post to a physical filename on the server 
    $filename = $this->convertToPhysicalPath($path); 

    // get the temporary file 
    $tmp_file = $_FILES['file']['tmp_name']; 

    // if this is not appending 
    if ($append == 0) { 
     // just copy the uploaded file 
     copy($tmp_file, $filename); 
    } else { 
     // append file contents 
     $write_handle = fopen($filename, "ab"); 
     $read_handle = fopen($tmp_file, "rb"); 

     $contents = fread($read_handle, filesize($tmp_file)); 
     fwrite($write_handle, $contents); 

     fclose($write_handle); 
     fclose($read_handle); 
    } 
0

如果你正在嘗試設計一個Web界面,允許任何人上傳一個大文件並恢復部分上傳,儘管我不知道如何幫助你。但是,如果你想要做的就是以可恢復的方式將文件從你的計算機傳輸到服務器,那麼你可以使用像rsync這樣的工具。 Rsync比較源和目標上的文件,然後僅複製兩者之間的差異。這樣,如果你有50 GB的文件上傳到你的服務器,然後改變一個,rsync會很快檢查所有其他文件是否相同,然後只發送你的一個更改的文件。這也意味着,如果傳輸中斷通過rsync將中斷它將停止。

傳統Rsync是在命令行(終端)上運行,它是默認安裝在大多數Linux和Mac OS X

rsync -avz /home/user/data sever:src/data 

這將從/ home/user中/數據傳輸的所有文件到服務器上的src/data。如果您然後更改/ home/user/data中的任何文件,則可以再次運行該命令以重新同步該文件。

如果您使用Windows,最簡單的解決方案可能是使用DeltaCopy,它是一個圍繞rsync的GUI。 download