2012-02-16 3 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

Если вы пытаетесь разработать веб-интерфейс, позволяющий любому пользователю загружать большой файл и возобновлять процесс загрузки, хотя я не знаю, как вам помочь. Но если все, что вы хотите сделать, это получить файлы с вашего компьютера на сервер с возможностью возобновления, вы можете использовать такой инструмент, как rsync. Rsync сравнивает файлы с источником и получателем, а затем копирует только различия между ними. Таким образом, если у вас есть 50 ГБ файлов, которые вы загружаете на свой сервер, а затем меняете их, rsync очень быстро проверяет, что все остальные файлы одинаковы, а затем отправляет только один измененный файл. Это также означает, что если передача прерывается частично через rsync, то она заберет туда, где она остановилась.

Традиционно Rsync запускается из командной строки (терминала) и устанавливается по умолчанию на большинстве Linux и Mac OS X.

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

Это перенести все файлы из/дома/пользователя/данных в src/data на сервере. Если вы затем измените любой файл в/home/user/data, вы можете снова запустить команду для повторной синхронизации.

Если вы используете окна, самым простым решением, вероятно, является использование DeltaCopy, который является графическим интерфейсом вокруг rsync. download

Смежные вопросы