使用伪文件将空文件上传到ftp

时间:2010-09-14 00:58:07

标签: python file ftp

据我所知,用ftp创建一个空文件是不可能的,你必须在本地驱动器上创建一个空文件,上传它,然后在完成后删除它。我想知道是否有可能做类似的事情:

class FakeFile:
    def read(self):
        return '\x04'

ftpinstance.storbinary('stor fe', FakeFile())

我认为这可能有用,因为storbinary的文档说它需要一个带有方法'read'的对象并调用它直到它返回EOF,而\ x04是ASCII EOF字符。我试过这个,文件最终在服务器上是一个随机数千字节大。我误解了什么吗?

3 个答案:

答案 0 :(得分:4)

无需实现类似文件的类,只需使用内置模块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()

答案 1 :(得分:2)

在现代使用中,文件结尾不是ASCII 4。这是XMODEM和电传打字时代的过时用法。试试这个:

class FakeFile:
    def read(self, size=0):
        return ''

因为空读是EOF。

使用当前代码,您应该获得一个完全由'\x04'个字符组成的随机长度文件。这是因为它在读取时似乎总是有数据。 ^ _-

答案 2 :(得分:0)

实际上,该文档的内容是“读取直至EOF”。我通过使read函数返回一个空字符串来解决这个问题。