python ftplib上传二进制文件

时间:2012-09-19 13:52:01

标签: python ftplib

我使用python ftplib将二进制文件上传到远程ftp服务器,但它总是传输少于其实际大小。 ps:本地env是windows,远程服务器是linux。 我用:

    'ftp.storbinary('STOR %s' % filename,open(filename,'rb'))'

我认为python的api read()不能正常工作,它会将一些特殊字符识别为EOF,实际上并非如此。

如何在不丢失字节的情况下上传二进制文件?

2 个答案:

答案 0 :(得分:2)

我实际上只是在解决这个问题。在打开要上传到FTP服务器的文件之前,我必须关闭正在写入的文件。

out2 = open('file.csv')
for r1 in cursor:
    out2.write(str(r1))
out2.close()

ftp_census = file_loc
stor_census = str("STOR egocensus_" + demoFileDate + ".csv")
fc = open(ftp_census, 'rb')
ftp.storbinary(stor_census, fc, 1024)

关闭文件后,FTP服务器上的文件大小正确。我还编辑了原始答案以更好地显示代码。我可能可以对此进行更好的编码,但是它可以正常工作。...

答案 1 :(得分:0)

在我明白为什么之前已经进行了几次艰难的测试。首先,这不是python中的错误。因为要传输的文件尚未从内存刷新到磁盘,所以:

f.retrbinary('RETR '+filename, filehandler.write, bufsize) 

执行此操作后,文件处理程序未显式关闭,retrbinary不会将其关闭,因此立即存储它将丢失内存中的一些字节。 因此,如果我们在存储之后显式关闭文件处理程序,如下所示:

f.retrbinary('RETR '+filename, filehandler.write, bufsize)
filehandler.close()

然后我们获得所有字节,有关更多详细信息,请参阅:“http://blog.csdn.net/hongchangfirst