Задать вопрос
@GolosB
ИТшник

Почему переодически портит файлы FTP pyftpdlib?

Оборудование отправляет файлы по FTP. Сервер на pyftpdlib. в 2% случаев файл приходит битым в первой строке.
ЁА°Ш?Л°        " : [
      {
         "ManNumDetection" : [
            {

Должно быть так:
{
   "NumberStat" : [
      {
         "ManNumDetection" : [

Куда копать?

Server FTP
def ftp_server_local():
    print("Starting FTP")
    # экземпляр фиктивного средства авторизации
    # для управления "виртуальными" пользователями
    authorizer = DummyAuthorizer()
    ftp_path = config.FTP_DIR
    login_ftp = config.LOGIN_FTP
    pass_ftp = config.PASS_FTP

    if not os.path.isdir(f'{ftp_path}'):
        os.mkdir(f'{ftp_path}')
    if not os.path.isdir(f'{ftp_path}/logs'):
        os.mkdir(f'{ftp_path}/logs')

    # authorizer.add_user(login_ftp, pass_ftp, ftp_path, perm='elamwMT')
    authorizer.add_user(login_ftp, pass_ftp, ftp_path, perm='elradfmwMT')
    # authorizer.add_anonymous(os.getcwd())

    # экземпляр класса обработчика FTP
    handler = FTPHandler
    handler.authorizer = authorizer

    # настраиваемый баннер (строка, возвращаемая при подключении клиента)
    handler.banner = "qqqqqq"

    # masquerade-адрес и диапазон портов, которые будут использоваться
    # для пассивных подключений. Строки ниже нужно раскомментировать
    # если вы находитесь за NAT (masquerade_address укажите свой).
    handler.masquerade_address = config.EXTERNAL_IP
    handler.passive_ports = range(60000, 60200)
    # экземпляр класса FTP-сервера, который слушает `0.0.0.0:2121`
    # address = ('0.0.0.0', config.PORT_FTP)
    address = ('', config.PORT_FTP)
    server = FTPServer(address, handler)

    # лимиты на соединения
    server.max_cons = 500
    server.max_cons_per_ip = 50
    # запись логов в файл
    logging.basicConfig(filename=f'{ftp_path}/logs/pyftpd.log', level=logging.ERROR)
    server.serve_forever()


if __name__ == '__main__':
    ftp_server_local()
  • Вопрос задан
  • 234 просмотра
Подписаться 2 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 1
@nemolayn
Создатель бота Nemo
Вопрос по вашему вопросу, какие файлы отправляете и какой размер?

Рекомендации:
Использовать SFTP. Скорее всего поможет. (Я не специалист)
А точнее модуль pysftp 0.2.9
https://pypi.org/project/pysftp/
import pysftp

with pysftp.Connection('hostname', username='me', password='secret') as sftp:
    with sftp.cd('public'):             # temporarily chdir to public
        sftp.put('/my/local/filename')  # upload file to public/ on remote
        sftp.get('remote_file')         # get a remote file

А так же документации есть, может поможет:
https://www.tutorialspoint.com/python_network_prog...
https://sftptogo.com/blog/python-sftp/
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы