Python实现FTP上传文件或文件夹(递归)

来源:互联网 发布:dnf机械爆炸优化补丁 编辑:程序博客网 时间:2024/04/30 01:07
__author__ = 'dacxu'__mail__ = 'xudacheng06.com'__date__ = '2013-10-29'__version = 1.0import sysimport osimport jsonfrom ftplib import FTP_XFER_FILE = 'FILE'_XFER_DIR = 'DIR'class Xfer(object):    '''    @note: upload local file or dirs recursively to ftp server    '''    def __init__(self):        self.ftp = None        def __del__(self):        pass        def setFtpParams(self, ip, uname, pwd, port = 21, timeout = 60):                self.ip = ip        self.uname = uname        self.pwd = pwd        self.port = port        self.timeout = timeout        def initEnv(self):        if self.ftp is None:            self.ftp = FTP()            print '### connect ftp server: %s ...'%self.ip            self.ftp.connect(self.ip, self.port, self.timeout)            self.ftp.login(self.uname, self.pwd)             print self.ftp.getwelcome()        def clearEnv(self):        if self.ftp:            self.ftp.close()            print '### disconnect ftp server: %s!'%self.ip             self.ftp = None        def uploadDir(self, localdir='./', remotedir='./'):        if not os.path.isdir(localdir):              return        self.ftp.cwd(remotedir)         for file in os.listdir(localdir):            src = os.path.join(localdir, file)            if os.path.isfile(src):                self.uploadFile(src, file)            elif os.path.isdir(src):                try:                      self.ftp.mkd(file)                  except:                      sys.stderr.write('the dir is exists %s'%file)                self.uploadDir(src, file)        self.ftp.cwd('..')        def uploadFile(self, localpath, remotepath='./'):        if not os.path.isfile(localpath):              return        print '+++ upload %s to %s:%s'%(localpath, self.ip, remotepath)        self.ftp.storbinary('STOR ' + remotepath, open(localpath, 'rb'))        def __filetype(self, src):        if os.path.isfile(src):            index = src.rfind('\\')            if index == -1:                index = src.rfind('/')                            return _XFER_FILE, src[index+1:]        elif os.path.isdir(src):            return _XFER_DIR, ''                def upload(self, src):        filetype, filename = self.__filetype(src)                self.initEnv()        if filetype == _XFER_DIR:            self.srcDir = src                        self.uploadDir(self.srcDir)        elif filetype == _XFER_FILE:            self.uploadFile(src, filename)        self.clearEnv()                if __name__ == '__main__':    srcDir = r"C:\sytst"    srcFile = r'C:\sytst\sar.c'    xfer = Xfer()    xfer.setFtpParams('192.x.x.x', 'jenkins', 'pass')    xfer.upload(srcDir)        xfer.upload(srcFile)

原创粉丝点击