Python ftplib не может получить размер файла перед загрузкой? - PullRequest
9 голосов
/ 13 июля 2010

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

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

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

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

Спасибо

Ответы [ 3 ]

22 голосов
/ 09 марта 2011

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

ftp.sendcmd("TYPE i")    # Switch to Binary mode
ftp.size("/some/file")   # Get size of file
5 голосов
/ 13 июля 2010

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

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

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

0 голосов
/ 13 июля 2010

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

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

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

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

...