class FTP(Sftp, Command): def __init__(self, ): Sftp.__init__(self) Command.__init__(self) self.size = Size() def get_server_size(self, server_path=u'/python/voice/1/1.mp3'): ##获取服务器上文件大小 filesize = self.size.get_server_size(command=self, server_path=server_path) return filesize def ftp_get(self, server_path=u'/python/books.html', local_floder=u''): ##下载服务器文件到本地 filesize = self.get_server_size(server_path=server_path) self.sftp_get(server_path=server_path, local_floder=local_floder, filesize=filesize) def ftp_put(self, local_path=u'c:/users/sunzhiming/desktop/books.html', server_floder=u'/python'): #上传文件到服务器 filesize = self.size.get_local_size(local_path) self.sftp_put(local_path=local_path, server_floder=server_floder, filesize=filesize)
def sftp_get(self, server_path, local_floder='', filesize='1K'): ##get方法,未指定local_floder,默认保存在当前路径下 filename = server_path.rsplit('/', 1)[-1] if local_floder: local_path = u'%s/%s' % (local_floder, filename) else: local_path = filename if os.path.exists(local_path): local_size = Size.get_local_size(local_path) server_size = filesize diff_size = server_size - local_size putty_diff_size = Size.putty_size(size=diff_size) log = u'size of server_path= %s - size of local_path= %s is :%s' % ( server_path, local_path, putty_diff_size) logging.info(log) print log if diff_size < 0: ##本地文件大于服务器文件,说明不是同一个文件,暂不做处理 flag = None pass elif diff_size < 1024: ##说明两个文件差异不大,可以认为文件以及下载完成 flag = False else: ##两个文件差异1024B,认为文件未下载完毕 log = u'local_path= %s exist' % local_path print log logging.info(log) flag = True else: #文件不存在,文件尚未下载 flag = True if flag: ##flag 用于标识是否开启下载 try: putty_server_size = Size.putty_size(filesize) log = u'from %s download %s,filesize=%s' % ( server_path, local_path, putty_server_size) print log logging.info(log) t1 = time() self.sftp.get(server_path, local_path) t2 = time() t = t2 - t1 log = u'successfully download %s to %s,cost time=%.2f second' % ( server_path, local_path, t) print log logging.info(log) except: log = format_exc() logging.info(log) print log