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

时间:2022-02-28 12:49:50

本文实例讲述了Python实现FTP上传文件或文件夹实例。分享给大家供大家参考。具体如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import sys
import os
import json
from 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)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。