FTP文件传输期间的Python数据通道超时

问题描述 投票:2回答:1

我正在尝试使用Python的ftplib传输文件。

def ftps_put_file(host, user, password, ftp_file_path, processed_file):
    try:
        context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH, cafile='C:\\PATH\\TO\\SECURE.crt')
        with FTP_TLS(host, user=user, passwd=password, context=context, timeout=10) as connection, open(processed_file, 'rb') as read_file:
            connection.set_debuglevel(2)
            connection.prot_p()
            connection.cwd(ftp_file_path)
            connection.storbinary(f"STOR {processed_file.name}", read_file)
    except Exception as e:
        print('Error occured in transporter.ftps_put_file: ' + str(e))

我可以在文件传输期间连接到FTP主机,没有任何问题。连接超时开始并关闭连接,然后该连接的日志显示为“ 425数据通道由于不满足最低带宽要求而超时”。我使用了其他FTP客户端(Filezilla,WinSCP),并且两者都可以连接到主机。

连接超时设置为2分钟的日志

*cmd* 'PBSZ 0'
*put* 'PBSZ 0\r\n'
*get* '200 PBSZ command successful.\n'
*resp* '200 PBSZ command successful.'
*cmd* 'PROT P'
*put* 'PROT P\r\n'
*get* '200 PROT command successful.\n'
*resp* '200 PROT command successful.'
*cmd* 'CWD /'
*put* 'CWD /\r\n'
*get* '250 CWD command successful.\n'
*resp* '250 CWD command successful.'
*cmd* 'TYPE I'
*put* 'TYPE I\r\n'
*get* '200 Type set to I.\n'
*resp* '200 Type set to I.'
*cmd* 'PASV'
*put* 'PASV\r\n'
*get* '227 Entering Passive Mode (204,58,62,196,19,199).\n'
*resp* '227 Entering Passive Mode (204,58,62,196,19,199).'
*cmd* 'STOR text.txt'
*put* 'STOR text.txt\r\n'
*get* '125 Data connection already open; Transfer starting.\n'
*resp* '125 Data connection already open; Transfer starting.'
*cmd* 'QUIT'
*put* 'QUIT\r\n'
*get* '425 Data channel timed out due to not meeting the minimum bandwidth requirement.\n'
*resp* '425 Data channel timed out due to not meeting the minimum bandwidth requirement.'

连接超时设置为60秒或更短的日志出现此顺序的顺序很奇怪,因为连接退出后会给出226 Transfer Completed。它不应该说明转移完成然后退出吗?

*cmd* 'PBSZ 0'
*put* 'PBSZ 0\r\n'
*get* '200 PBSZ command successful.\n'
*resp* '200 PBSZ command successful.'
*cmd* 'PROT P'
*put* 'PROT P\r\n'
*get* '200 PROT command successful.\n'
*resp* '200 PROT command successful.'
*cmd* 'CWD /'
*put* 'CWD /\r\n'
*get* '250 CWD command successful.\n'
*resp* '250 CWD command successful.'
*cmd* 'TYPE I'
*put* 'TYPE I\r\n'
*get* '200 Type set to I.\n'
*resp* '200 Type set to I.'
*cmd* 'PASV'
*put* 'PASV\r\n'
*get* '227 Entering Passive Mode (204,58,62,196,20,46).\n'
*resp* '227 Entering Passive Mode (204,58,62,196,20,46).'
*cmd* 'STOR text.txt'
*put* 'STOR text.txt\r\n'
*get* '125 Data connection already open; Transfer starting.\n'
*resp* '125 Data connection already open; Transfer starting.'
*cmd* 'QUIT'
*put* 'QUIT\r\n'
*get* '226 Transfer complete.\n'
*resp* '226 Transfer complete.'
python python-3.x ftp ftps
1个回答
0
投票
我在客户端使用Linux Python 3.7标准库(ftplib.FTP_TLS),服务器端使用Windows FTP服务。

目前没有令人满意的解决方案,我只是通过检查上传的文件大小来确保正确上传了文件。有人告诉我Windows上的FileZilla客户端可以正确处理此问题(即没有错误,但我无法验证)。

© www.soinside.com 2019 - 2024. All rights reserved.