我使用python ftplib将二进制文件上传到远程ftp服务器,但它总是传输少于其实际大小。 ps:本地env是windows,远程服务器是linux。 我用:
'ftp.storbinary('STOR %s' % filename,open(filename,'rb'))'
我认为python的api read()不能正常工作,它会将一些特殊字符识别为EOF,实际上并非如此。
如何在不丢失字节的情况下上传二进制文件?
答案 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”