通过伪文件上传空文件到FTP
据我所知,使用FTP是无法直接创建一个空文件的。你必须先在本地电脑上创建一个空文件,然后把它上传到服务器,最后再删除它。我在想,是否可以像这样做:
class FakeFile:
def read(self):
return '\x04'
ftpinstance.storbinary('stor fe', FakeFile())
我觉得这样可能有效,因为文档中提到,storbinary这个方法需要一个带有'read'方法的对象,并会一直调用这个方法,直到返回EOF(文件结束)。而\x04是ASCII码中的EOF字符。不过我试过之后,发现上传到服务器的文件大小却是随机的几千字节。我是不是理解错了什么?
3 个回答
0
其实文档上写的是“读取直到文件结束”。我通过让读取函数返回一个空字符串来解决这个问题。
4
你不需要自己去实现一个文件类,只要使用内存中的文件就可以了,这个功能在Python的内置模块StringIO
(在Python 3中用BytesIO
)里已经提供了。
import ftplib
import cStringIO
ftp = ftplib.FTP('ftp.example.com')
ftp.login('user', 'pass')
voidfile = cStringIO.StringIO('')
ftp.storbinary('STOR emptyfile.foo', voidfile)
ftp.close()
voidfile.close()
2
在现代使用中,文件结束符(End of File)并不是ASCII码4。这种用法已经过时了,最早是出现在XMODEM和电传打字机的时代。你可以试试这个:
class FakeFile:
def read(self, size=0):
return ''
因为空读取就是文件结束。
根据你现在的代码,你应该得到一个随机长度的文件,里面全是'\x04'
字符。这是因为在读取时,它似乎总是有数据。^_-