Можете ли вы заставить FTP-клиент использовать двоичный файл со стороны сервера

#python #ftp

#python #ftp

Вопрос:

У нас есть устройства, на которых запущен собственный FTP-клиент. Они извлекают медиафайлы (видео и изображения AVI), а также файлы XML из нашего веб-сервиса, используя FTP-сервер на базе python. Проблема, с которой я сталкиваюсь, заключается в том, что FTP-клиент хочет загружать медиафайлы в режиме ASCII вместо двоичного режима. Я хотел бы продолжать использовать наш FTP-сервер python (pyftpdlib), но я не могу найти способ заставить клиента использовать двоичный режим.

Я просмотрел FTP RFC в поисках последовательности команд / ответов, которая позволила бы нашему FTP-серверу указывать FTP-клиенту использовать двоичный файл вместо ASCII. Существует ли такая последовательность команд / ответов?

Комментарии:

1. нет, AFAIK, такой последовательности команд на стороне сервера нет… вы можете попытаться доставить только двоичный файл со стороны сервера, но это может привести к очень странному поведению / сбою на стороне клиента, если он ожидает ASCII … единственное решение IMHO — изменить поведение клиента!

Ответ №1:

Вы можете переопределить поведение по умолчанию или ваш ftp-сервер, используя пользовательский FTPHandler и переопределяющий FTPHandler.ftp_TYPE(filetype) метод, и таким образом заставить ваш сервер обслуживать файл в двоичном режиме self._current_type = "i" .

Комментарии:

1. Я использую ваш подход, но Filezilla пыталась использовать «TYPE A» для файла с именем «test», который был zip-архивом, и он был поврежден. Мой сервер обслуживал его «как есть», но клиент прочитал его в текстовом режиме. Изменение файла на «test.dat» вынудило Filezilla использовать «ТИП I» и устранило проблему. Но проблема в том, что, хотя мой сервер обрабатывает «ТИП A» как «ТИП I», клиентская сторона все равно повреждает файл.