Twisted - FTP服务器的简单文件已完成事件

时间:2012-03-20 15:47:04

标签: python ftp twisted ftp-server

我想对某些基本的FTP服务器使用twisted,just like this example

from twisted.protocols.ftp  import FTPFactory, FTPRealm
from twisted.cred.portal    import Portal
from twisted.cred.checkers  import AllowAnonymousAccess, FilePasswordDB
from twisted.internet       import reactor

#pass.dat looks like this:
# jeff:bozo
# grimmtooth:bozo2

p = Portal(FTPRealm('./'), (AllowAnonymousAccess(), FilePasswordDB("pass.dat")))
f = FTPFactory(p)
reactor.listenTCP(21, f)
reactor.run()

...只需一个简单的自定义:我想在文件上传(STOR)成功完成时触发一个事件,这样我的自定义代码就可以充分处理这个文件。

我没有找到FTPFactory或FTP的文档来帮助我这样做。我应该重载FTP对象或其他一些对象吗?如何连接所有东西?

我在过去做过简单的自定义HTTP服务器并且非常简单,但我几乎找不到关于FTP的资料。

2 个答案:

答案 0 :(得分:3)

看起来以下可能会成功

from twisted.protocols import ftp

class MyFTP (ftp.FTP):
    def ftp_STOR(self, path):
        d = super(MyFTP, self).ftp_STOR(path)

        d.addCallback( lambda _: self.onStorComplete(path) )

        return d

    def onStorComplete(self, path):
        # XXX your code here

 f = ftp.FTPFactory( some_portal_object )
 f.protocol = MyFTP

答案 1 :(得分:3)

首先,这只是对Rakis回答的修改。没有他的答案,这将不存在。他的那个只是不适合我的设置。它也可能只是API发生了变化,因为这是5年之后。

class MyFTP (ftp.FTP):

    def ftp_STOR(self, path):

        d = super(MyFTP, self).ftp_STOR(path)

        def onStorComplete(d):
            print 'STORED', repr(d), path
            return d

        d.addCallback(onStorComplete)

        return d

f = ftp.FTPFactory( some_portal_object )
f.protocol = MyFTP