Как использовать FTP-интерфейс

File Transfer Protocol является одним из старейших протоколов передачи данных, однако используется и в настоящее время. Особенностью протокола является то, что для работы используется два соединения:

  • управляющее, по которому передаются команды и ответы на них;
  • соединение для передачи данных.

Все команды и ответы передаются с помощью протокола Telnet и представляют собой текстовые строки. Для соединения используется стандартный порт 21.

Облачное хранилище использует только пассивный режим передачи данных. Процесс установления соединения и передачи данных инициируется исключительно со стороны клиента. Запись в конец файла не поддерживается. В FTP этот функционал реализуется через команды STOR, RETR после REST > 0. На подобную последовательность FTP-прокси вернёт код ответа 426. Поддерживаемые FTP-команды приведены ниже.

Авторизация

Команда Аргументы Обозначение
USER имя пользователя Передать имя пользователя
PASS пароль Передать пароль

Защита

Команда Аргументы Обозначение
AUTH не требуются Установить защищенное TLS-соединение. Аргументы будут проигнорированы
PROT P / C Установить режим защиты. P for Private, C for Clean. По умолчанию P будет использовать TLS
PBSZ размер буфера Установить размер буфера защиты. Cервер ответит 200 OK

Разное

Команда Аргументы Обозначение
FEAT не требуются Отобразить список поддерживаемых дополнительных функций
SYST не требуются Отобразить операционную систему сервера
NOOP не требуется Пустая операция, сервер в ответ передаст 200 ОК
OPTS согласно RFC2389 Передать серверу дополнительные опции

Доступ к файлам

Команда Аргументы Обозначение
SIZE имя файла Получить размер файла
STAT не требуются Получить статистику соединения
MDTM путь Получить дату и время изменения файла
RETR имя файла Скачать файл. Сработает только после перехода в пассивный режим командой PASV. Поддерживается докачка
STOR имя файла Загрузить файл в пассивном режиме
APPE имя файла Сообщить серверу принять удаленный файл. Команда сработает только если такого файла еще не существует в хранилище. Если файл существует, то будет возвращена ошибка
DELE имя файла Удалить файл
RNFR имя файла Выбрать файл для переименования
RNTO новое имя файла Задать новое имя файла. Только после того как был выбран командой RNFR
ALLO размер в байтах Вернуть ответ о наличии доступного места. Вне зависимости от аргумента ответ будет 202 OK
REST смещение в байтах Команда “перемотки” к определенной позиции в файле. Бесполезная команда. Требуется для докачки с помощью RETR

Работа с контейнерами

Команда Аргументы Обозначение
CWD имя директории Перейти в указанную директорию
PWD не требуются Показать текущий рабочий каталог
CDUP не требуются Перейти в родительскую директорию
NLST не требуются Возвратить список файлов директории в более кратком формате чем LIST. Только в режиме пассивного соединения
LIST путь Вывести содержимое текущей или предоставленной директории. Поддерживается как относительный, так и абсолютный путь
MLSD путь Вывести содержимое текущей директории. Главное отличие от LIST - метки времени с точностью до секунды, время указывается в UTC
MKD имя директории Создать директорию
RMD имя директории Удалить директорию

Установление соединения

Команда Аргументы Обозначение
TYPE A / I Сменить режим передачи данных. Имеется два варианта - ASCII(A) или Binary(I). Любой аргумент игнорируется, команда используется для обратной совместимости. Поддерживается только Binary-режим
PASV не требуются Перейти в пассивный режим передачи данных
EPSV не требуются Инициировать соединение для передачи данных в пассивном режиме. В ответ сервер передаст номер порта для соединения.
EPRT версия протокола / адрес / порт Инициировать соединение для передачи данных. Команда исключительно для активного режима передачи данных, поэтому на эту команду сервер сообщит, что активный режим не поддерживается
PORT не требуются Перейти в активный режим передачи данных. Команда исключительно для активного режима передачи данных, поэтому на эту команду сервер сообщит, что активный режим не поддерживается
QUIT не требуются Отключиться от сервера