Есть ли в протоколе FTP что-то вроде заголовка HTTP Range? - PullRequest
4 голосов
/ 29 марта 2010

Предположим, я хочу передать только часть файла по FTP - возможно ли использовать стандартный протокол FTP?

В HTTP я мог бы использовать Заголовок диапазона в запросе, чтобы указать диапазон данных удаленного ресурса. Если это файл размером 1 МБ, я могу попросить байты от 600 КБ до 700 КБ.

Есть ли что-нибудь подобное в FTP? Я читаю FTP RFC , ничего не вижу, но хочу убедиться, что я ничего не пропускаю.

В FTP есть команда Restart - это сработает?


Добавление
Получив ответ Брайана Бонди ниже , я написал класс Stream только для чтения, который обертывает FTP. Он поддерживает операции Seek () и Read () для ресурса, который читается через FTP, на основе глагола REST.
Найдите это в http://cheeso.members.winisp.net/srcview.aspx?dir=streams&file=FtpReadStream.cs

Seek () довольно медленный, потому что настройка сокета данных занимает много времени. Наилучшие результаты достигаются, когда вы оборачиваете этот поток в BufferedStream .

Ответы [ 2 ]

7 голосов
/ 29 марта 2010

Да, вы можете использовать команду REST.

REST устанавливает точку, с которой должна начинаться последующая передача файла. Обычно используется для возобновления прерванных передач. Команда должна прийти сразу перед RETR или STOR и, следовательно, после PORT или PASV.

Из RFC 959 FTP:

RESTART (REST) ​​Поле аргумента представляет маркер сервера, на котором Передача файлов должна быть возобновлена. это команда не вызывает передачу файла но пропускает файл до указанные данные контрольной точки. это команда должна быть немедленно выполнена с помощью соответствующей команды службы FTP что должно привести к передаче файла резюме.

Подробнее: http://www.faqs.org/rfcs/rfc959.html#ixzz0jZp8azux

1 голос
/ 29 марта 2010

Вы должны проверить, как GridFTP выполняет параллельные передачи. При этом используются те методы, которые вам нужны (и на самом деле это может быть код, который лучше позаимствовать, чем реализовывать с нуля).

...