一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

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

时间:2017-08-28 编辑:猪哥 来源:一聚教程网

importsys
importos
importjson
fromftplibimportFTP
  
_XFER_FILE='FILE'
_XFER_DIR='DIR'
  
classXfer(object):
  '''''
  @note: upload local file or dirs recursively to ftp server
  '''
  def__init__(self):
    self.ftp=None
    
  def__del__(self):
    pass
    
  defsetFtpParams(self, ip, uname, pwd, port=21, timeout=60):    
    self.ip=ip
    self.uname=uname
    self.pwd=pwd
    self.port=port
    self.timeout=timeout
    
  definitEnv(self):
    ifself.ftpisNone:
      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) 
      printself.ftp.getwelcome()
    
  defclearEnv(self):
    ifself.ftp:
      self.ftp.close()
      print'### disconnect ftp server: %s!'%self.ip 
      self.ftp=None
    
  defuploadDir(self, localdir='./', remotedir='./'):
    ifnotos.path.isdir(localdir): 
      return
    self.ftp.cwd(remotedir) 
    forfileinos.listdir(localdir):
      src=os.path.join(localdir,file)
      ifos.path.isfile(src):
        self.uploadFile(src,file)
      elifos.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('..')
    
  defuploadFile(self, localpath, remotepath='./'):
    ifnotos.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):
    ifos.path.isfile(src):
      index=src.rfind('\')
      ifindex==-1:
        index=src.rfind('/')        
      return_XFER_FILE, src[index+1:]
    elifos.path.isdir(src):
      return_XFER_DIR, ''    
    
  defupload(self, src):
    filetype, filename=self.__filetype(src)
      
    self.initEnv()
    iffiletype==_XFER_DIR:
      self.srcDir=src      
      self.uploadDir(self.srcDir)
    eliffiletype==_XFER_FILE:
      self.uploadFile(src, filename)
    self.clearEnv() 
          
  
if__name__=='__main__':
  srcDir=r"C:sytst"
  srcFile=r'C:sytstsar.c'
  xfer=Xfer()
  xfer.setFtpParams('192.x.x.x','jenkins','pass')
  xfer.upload(srcDir)  
  xfer.upload(srcFile)

热门栏目