Есть ли способ разрешить возобновление неудачной загрузки с помощью сценария Perl CGI? - PullRequest
4 голосов
/ 04 июня 2010

Приложение простое, HTML-форма, которая публикует скрипт на Perl. Проблема в том, что наши клиенты иногда загружают очень большие файлы (gt 500 МБ), и их интернет-соединения иногда могут быть ненадежными.

Есть ли способ возобновить неудачную передачу, как в WinSCP, или это невозможно без поддержки клиента?

Ответы [ 2 ]

3 голосов
/ 04 июня 2010

AFAIK, он должен поддерживаться клиентом. По сути, клиент и сервер должны согласовать, какие части файла (вероятно, определенные как части в POST «multipart / form-data») уже были загружены, а затем код сервера должен иметь возможность объединять новые загруженные данные с существующий.

Лучшее решение - иметь пользовательский код загрузчика, обычно реализуемый на Java, хотя я думаю, что это возможно и во Flash. Вы можете даже сделать это с помощью JavaScript - см. 2 раздела с примерами ниже


Вот пример того, как Google сделал это с YouTube: http://code.google.com/apis/youtube/2.0/developers_guide_protocol_resumable_uploads.html

Используется HTTP-ответ «308 Resume Incomplete», который отправляет с сервера заголовок range: bytes=0-408, чтобы указать, что уже было загружено.


Для дополнительных идей по теме:

  1. http://code.google.com/p/gears/wiki/ResumableHttpRequestsProposal

  2. Кто-то реализовал это, используя Google Gears на стороне пользователя и PHP на стороне сервера (последний вы можете легко перенести на Perl)

    http://michaelshadle.com/2008/11/26/updates-on-the-http-file-upload-front/

    http://michaelshadle.com/2008/12/03/updates-on-the-http-file-upload-front-part-2/

0 голосов
/ 06 июня 2010

Жаль, что ваши клиенты не могут использовать загрузку по FTP, так как это уже включает в себя такие возможности. Существует также «кодировка передачи по частям» в HTTP. Я не знаю, какие модули Perl могли бы его уже поддерживать.

...