@kriminal_key

Не удается отправить файл на ftp сервер, в чем может быть причина?

Использую аналогичный код:
import ftplib
import os
import os.path

host = "server.serv"
port = 0000
user = "user"
password = "password"
filename = "file.txt"

ftp = ftplib.FTP()

ftp.connect(host, port) #конектюсь к ftp
ftp.login(user, password) #выполняю вход

file = open(filename) #Открываю файл (по дефолту мод r)
ftp.storlines('STOR ' + filename, file)

file.close()

ftp.quit()


Файл находится в той же дириктории что и скрипт.
Права на запись есть.
Я вхожу на сервер, могу даже создать там папку используя ftp.mkd().

В тот момент когда код доходит до строчки с записью файла на ftp, он долго думает и после выводит эту ошибку.

5cfd2c54e4a55773445860.png

Вот логи, никакой информации связанной с STOR, но всё остальное работает замечательно

5cfd2c8a01e19387936407.jpeg

я не стал указывать официальные данные о хосте порте и т.д в целях безопасности, на деле вход на сервак происходит, единственное что здесь не работает это запись файла на сервер, очень долго мучался, искал инфу в интернете, везде описан именно такой способ, но в моем случае он не работает. В чём может быть проблема?
  • Вопрос задан
  • 657 просмотров
Решения вопроса 1
neatsoft
@neatsoft
Life is too short for bad software
Видно что ошибка возникает при вызове FTP.connect. Учитывая что библиотека FTP используется во многих проектах, и c подобными проблемами больше никто не сталкивается, рискну предположить, что неправильно заданы параметры - адрес и порт. Для их проверки удобно использовать интерактивный режим Python.

Кроме того, исходя из личного опыта, советую явно указывать таймаут:
FTP_TIMEOUT = 10 # seconds
ftp.connect(host, port, FTP_TIMEOUT)


задать рабочий каталог:
ftp.cwd(path)

и обернуть вызов библиотечных функций в try-except блоки:
try:
    ftp.connect(...)
    ftp.login(...)
    ftp.cwd(...)
except Exception as e:
    ...

...

try:
    ftp.storbinary(f'STOR {filename}', f)
except Exception as e:
    ...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@rPman
возможно вам нужно включить passive mode если между вами и сервером фаервол (например за NAT)
ftp.set_pasv(true)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы