【问题标题】:uploading empty file to ftp with psuedo-file使用伪文件将空文件上传到 ftp
【发布时间】:2010-09-14 00:58:07
【问题描述】:

据我所知,用 ftp 创建空文件是不可能的,您必须在本地驱动器上创建一个空文件,上传它,然后在完成后将其删除。我想知道是否可以执行以下操作:

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

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

我认为这可能会起作用,因为 storbinary 的文档说它需要一个带有“读取”方法的对象并调用它直到它返回 EOF,而 \x04 是 ASCII EOF 字符。虽然我已经尝试过了,但文件最终在服务器上是随机数的千字节大。我是不是误会了什么?

【问题讨论】:

    标签: python file ftp


    【解决方案1】:

    无需实现您自己的类文件类,只需使用内置模块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】:

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

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

      因为空读是 EOF。

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

      【讨论】:

      • 为什么上传完?它不应该永远上传吗?
      • 我不知道。我认为它也应该如此。
      【解决方案3】:

      实际上,文档读取“读取直到 EOF”。我通过让 read 函数返回一个空字符串来解决这个问题。

      【讨论】:

        猜你喜欢
        • 2013-02-22
        • 1970-01-01
        • 2013-06-09
        • 2014-01-09
        • 1970-01-01
        • 2012-05-11
        • 2014-05-15
        相关资源
        最近更新 更多