Загрузка файла с перерывами - PullRequest
1 голос
/ 17 февраля 2012

Я хотел бы загрузить большие файлы на мой сервер, но я хотел бы иметь возможность делать перерывы (например, пользователь должен иметь возможность выключить свой компьютер и продолжить после перезагрузки) в процессе загрузки.

Я думаю, что могу справиться с загрузкой на стороне клиента, но я не знаю, как сделать на стороне сервера.Каков наилучший способ сделать это на стороне сервера?Может ли PHP это сделать?Является ли PHP наиболее эффективным?

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 17 февраля 2012

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

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

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

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

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

0 голосов
/ 17 февраля 2012

Если вам удастся сделать запись на стороне клиента на фрагментах, вы можете сделать что-то вроде этого на стороне сервера:

    // 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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...