Python ftplib не может получить размер файла перед загрузкой?

Я использую ftplib для передачи файлов. Все работает отлично. Теперь я пытаюсь получить размер целевого файла перед загрузкой.

  1. Сначала я попытался просто получить размер с помощью ftp.size(имя файла). Сервер жаловался, что я не могу сделать это в режиме ascii.

  2. Затем я попытался установить двоичный режим, используя ftp.sendcmd("binary") и ftp.sendcmd("bin"). В обоих случаях сервер жаловался «500 двоичных файлов, не понятых».

Может ли ftplib получить размер файла перед загрузкой в ​​этом случае? Я не контролирую FTP-сервер и не могу изменить его поведение.

Спасибо


person jason    schedule 12.07.2010    source источник


Ответы (3)


Очень поздний ответ, но вот правильный ответ. Это работает с ProFTPD.

ftp.sendcmd("TYPE i")    # Switch to Binary mode
ftp.size("/some/file")   # Get size of file
person Ryan    schedule 09.03.2011
comment
Для полноты: чтобы вернуться к ASCII, используйте TYPE A - person ezdazuzena; 04.12.2014

Ftplib может получить размер файла перед загрузкой. Как говорится в документации:

FTP.size(имя_файла) Запросить размер файла с именем имя_файла на сервере. В случае успеха размер файла возвращается как целое число, в противном случае возвращается None. Обратите внимание, что команда SIZE не стандартизирована, но поддерживается многими распространенными реализациями серверов

Видимо ваш сервер не поддерживает эту функцию.

person Piotr Duda    schedule 12.07.2010

«Сервер жаловался, что я не могу сделать это в режиме ascii». -- Попробуйте указать точный код, который вы использовали, И точный текст ответа сервера. Используйте копирование/вставку, не печатайте по памяти.

У вас есть доступ к FTP-клиенту из командной строки? Если нет, получите один. Используйте его, чтобы поэкспериментировать с возможностями сервера. Клиентская команда, такая как REMOTEHELP, — ваш друг. Пример:

ftp> remotehelp size
214 Syntax: SIZE <sp> pathname

Это указывает на то, что сервер, к которому я был подключен, будет поддерживать команду SIZE.

person John Machin    schedule 12.07.2010