我使用 python ftplib 将二进制文件上传到远程 ftp 服务器,但它总是传输小于它的实际大小。ps:本地环境是windows,远程服务器是linux。我用:
'ftp.storbinary('STOR %s' % filename,open(filename,'rb'))'
我认为 python 的 api read() 无法正常工作,它会将某些特殊字符识别为 EOF,但实际上不是。
如何上传二进制文件而不丢失字节?
我实际上只是解决了这个问题。在打开文件上传到 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 服务器上的文件大小是正确的。我还编辑了原始答案以更好地显示代码。我可能可以更好地编码,但它正在工作....
在我理解原因之前,已经进行了几次艰苦的测试。首先,这不是 python 中的错误。因为要传输的文件还没有从内存刷新到磁盘,为此:
f.retrbinary('RETR '+filename, filehandler.write, bufsize)
这样做之后,文件处理程序不会显式关闭,retrbinary
也不会关闭它,因此立即存储它会丢失内存中的一些字节。因此,如果我们在存储后显式关闭文件处理程序,如下所示:
f.retrbinary('RETR '+filename, filehandler.write, bufsize)
filehandler.close()
然后我们得到了所有字节,有关更多详细信息,请参阅:' http://blog.csdn.net/hongchangfirst '