FTP library error: got more than 8192 bytes

FTP library error: got more than 8192 bytes

Python 上传大小超过 8192 字节的文件时失败。而例外只有"got more than 8192 bytes"。有上传大文件的解决方案吗

try:
    ftp = ftplib.FTP(str_ftp_server )
    ftp.login(str_ftp_user, str_ftp_pass)
except Exception as e:
    print('Connecting ftp server failed')
    return False

try:
    print('Uploading file ' + str_param_filename)
    file_for_ftp_upload = open(str_param_filename, 'r')
    ftp.storlines('STOR ' + str_param_filename, file_for_ftp_upload)

    ftp.close()
    file_for_ftp_upload.close()
    print('File upload is successful.')
except Exception as e:
    print('File upload failed !!!exception is here!!!')
    print(e.args)
    return False

return True

storlines一次读取一个文本文件一行,8192是每行的最大大小。作为上传功能的核心,您可能最好使用:

with open(str_param_filename, 'rb') as ftpup:
    ftp.storbinary('STOR ' + str_param_filename, ftpup)
    ftp.close()

它以二进制形式读取和存储,一次一个块(与 8192 相同的默认值),但应该适用于任何大小的文件。

我有一个类似的问题并通过增加 ftplib 的 maxline 变量的值解决了它。您可以将其设置为您想要的任何整数值。它表示文件中每行的最大字符数。这会影响上传和下载。

根据 Alex Martelli 的回答,我建议在大多数情况下使用 ftp.storbinary,但在我的情况下这不是一个选项(不是常态)。

ftplib.FTP.maxline = 16384    # This is double the default value

只需在开始文件传输之前随时调用该行即可。