精华内容
下载资源
问答
  • SFTP下载文件到本地

    2021-04-25 11:30:08
    public class SftpUtil { private final static Log logger = LogFactory.getLog(SftpUtil.class);... * 从SFTP服务器下载文件 * * @param ftpHost SFTP IP地址 * * @param ftpUserName SFTP.
    public class SftpUtil {
       
       private final static Log logger = LogFactory.getLog(SftpUtil.class);
    
       static Log log = LogFactory.getLog(SftpUtil.class);
       /*
        * 从SFTP服务器下载文件
        * 
        * @param ftpHost SFTP IP地址
        * 
        * @param ftpUserName SFTP 用户名
        * 
        * @param ftpPassword SFTP用户名密码
        * 
        * @param ftpPort SFTP端口
        * 
        * @param ftpPath SFTP服务器中文件所在路径 格式: ftptest/aa
        * 
        * @param localPath 下载到本地的位置 格式:H:/download
        * 
        * @param fileName 文件名称
        */
       public static void downloadSftpFile(String ftpHost, String ftpUserName,
             String ftpPassword, int ftpPort, String ftpPath, String localPath,
             String fileName) throws JSchException {
          Session session = null;
          Channel channel = null;
    
          JSch jsch = new JSch();
          session = jsch.getSession(ftpUserName, ftpHost, ftpPort);
          session.setPassword(ftpPassword);
          session.setTimeout(100000);
          Properties config = new Properties();
          config.put("StrictHostKeyChecking", "no");
          session.setConfig(config);
          session.setConfig("kex","diffie-hellman-group1-sha1");
          session.connect();
    
          channel = session.openChannel("sftp");
          channel.connect();
          ChannelSftp chSftp = (ChannelSftp) channel;
    
    //    String ftpFilePath = ftpPath + File.separatorChar + fileName;
    //    String localFilePath = localPath + File.separatorChar + fileName;
          String ftpFilePath = ftpPath + fileName;
          String localFilePath = localPath + fileName;
    
          log.info("ftp路径:"+ftpFilePath);
          log.info("本地路径:"+localFilePath);
          try {
             chSftp.get(ftpFilePath, localFilePath);
          } catch (Exception e) {
             e.printStackTrace();
             logger.info("download error.");
          } finally {
             chSftp.quit();
             channel.disconnect();
             session.disconnect();
          }
    
       }
       /*
        * 上传文件到SFTP服务器
        * 
        * @param ftpHost SFTP IP地址
        * 
        * @param ftpUserName SFTP 用户名
        * 
        * @param ftpPassword SFTP用户名密码
        * 
        * @param ftpPort SFTP端口
        * 
        * @param sftpPath sftp上传路径
        * 
        * @param localPath 本地文件所在路径 
        * 
        * @param fileName 本地文件名称
        */
       public static void uploadSftpFile(String ftpHost, String ftpUserName,
             String ftpPassword, int ftpPort, String sftpPath, String localPath,
             String fileName) throws JSchException {
          Session session = null;
          Channel channel = null;
          
          JSch jsch = new JSch();
          session = jsch.getSession(ftpUserName, ftpHost, ftpPort);
          session.setPassword(ftpPassword);
          session.setTimeout(100000);
          Properties config = new Properties();
          config.put("StrictHostKeyChecking", "no");
          session.setConfig(config);
          session.connect();
          
          channel = session.openChannel("sftp");
          channel.connect();
          ChannelSftp chSftp = (ChannelSftp) channel;
          
          String ftpFilePath = sftpPath + File.separatorChar + fileName;
          String localFilePath = localPath + File.separatorChar + fileName;
          
          try {
             chSftp.put(localFilePath, ftpFilePath);
          } catch (Exception e) {
             e.printStackTrace();
             logger.info("download error.");
          } finally {
             chSftp.quit();
             channel.disconnect();
             session.disconnect();
          }
          
       }
       
       /**
        * @Description SFTP文件下载测试
        * @throws JSchException
        */
       public static void testDownloadFile() throws JSchException {
          //SFTP服务地址
          String ftpHost = "192.168.100.21";
          //用户名
          String ftpUserName = "wl";
          //密码
          String ftpPassword = "wl";
          //端口
          int ftpPort = 22;
          //SFTP服务器文件路径
          String ftpPath = "\\20170614111901996000000000000001\\";
          //SFTP服务器文件名
          String fileName = "九江银行-风险评估一键报告模板.docx";
          //下载到本地的存储路径
          String localPath = "C:\\file\\IG\\attach\\svc\\20170807134837329000000000000014\\";
          //下载文件
          downloadSftpFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, localPath, fileName);
       }
       /**
        * @Description SFTP文件上传测试
        * @throws JSchException
        */
       public static void testUploadFile() throws JSchException {
          //SFTP服务地址
          String ftpHost = "192.168.100.21";
          //用户名
          String ftpUserName = "wl";
          //密码
          String ftpPassword = "wl";
          //端口
          int ftpPort = 22;
          //SFTP服务器文件路径
          String ftpPath = "\\20170614111901996000000000000001\\";
          //SFTP服务器文件名
          String fileName = "常熟新需求工作计划.xlsx";
          //上传到SFTP存储路径
          String localPath = "C:\\file\\IG\\attach\\svc\\20170807134837329000000000000014\\";
          //上传文件
          uploadSftpFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, localPath, fileName);
       }
       
       /**
        * @Descript SFTP服务器文件传输测试
        * @param args
        * @throws JSchException
        */
       public static void main(String[] args) throws JSchException {
    //    testDownloadFile();
    //    testUploadFile();
       }
    展开全文
  • 下载html整个文件sftp> get -r html 下载单个文件sftp> get index.html

     下载html整个文件:

    sftp> get -r html

    下载单个文件:

    sftp> get index.html

     

    展开全文
  • 3、文件上传:jdk下载到本机/software目录,用sftp进入到服务器的存放目录,用put发送文件 pwd查看服务器当前目录 lpwd查看本地当前目录 quit退出sftp 4、文件下载 get xxx.jar lls列举本地...

    1、打开终端输入:sftp用户@服务器IP,输入yes,输入用户密码

    2、centos7上创建目录:mkdir /usr/local/java

    3、文件上传:jdk下载到本机/software目录,用sftp进入到服务器的存放目录,用put发送文件

    pwd查看服务器当前目录  lpwd查看本地当前目录  quit/exit/bye退出sftp

    4、文件下载

    get -r xxx.jar

    lls列举本地当前目录文件列表

    5、上传文件夹

    put -r 文件夹/. 目的文件夹

    cd 目的文件夹 :查看是否上传成功

    6、下载文件夹

    get -r 文件夹 目的文件夹

     

     

     

     

    展开全文
  • sftp服务器下载文件本地,这是一个简单的需求,使用paramkio模块就可以实现,...将sftp服务器的文件下载到本地临时创建的文件夹: class UpdateFile: def __init__(self,host,username,password,port=22):...

    从sftp服务器下载文件到本地,这是一个简单的需求,使用paramkio模块就可以实现,那么如何在项目运行过程中定期从sftp端拉下来要更新的项目文件,并且更新到项目中。

    从sftp服务器下载文件到本地

    将sftp服务器的文件下载到本地临时创建的文件夹:

    import paramiko
    class UpdateFile:
        def __init__(self,host,username,password,port=22):
            self.sf = paramiko.Transport((host,port))  #连接服务器
            self.sf.connect(username=username,password=password)  # 登录
            self.sftp = paramiko.SFTPClient.from_transport(self.sf)  #创建操作对象
    
        def isDir(self,sftp,path):  # 判断远程的文件对象是目录还是文件
            try:
                sftp.chdir(path)  #尝试进入下一级
                sftp.chdir('..')
                return True
            except:
                return False
    
        def downloadDir(self,downDir,remoteDir):  # 下载文件到本地
            if not os.path.isdir(downDir):  #先判断本地临时文件夹是否存在
                os.makedirs(downDir)
            self.sftp.chdir(remoteDir)  #进入远程目录
            remote_files = self.sftp.listdir()  #查看当前远程目录下的所有文件
            for r_f in remote_files:
                downpath = os.path.join(downDir,r_f)  #拼接好本地要保存的路径
                if r_f in ['__pycache__', '.idea','.svn',os.path.basename(__file__)]:  #不去下载的文件
                    pass
                else:
                    if not os.path.exists(downpath):  #先判断本地目录是否存在
                        if self.isDir(self.sftp, r_f):   #再判断当前对象在远程是否为目录
                            os.makedirs(downpath)   #如果远程是目录,则在本地创建对应的目录
                            self.downloadDir(downpath, r_f)  #同时下载该目录下的所有文件
                        else:
                            open(downpath,'wb')   #如果不是目录,则创建文件
                            self.sftp.get(r_f, downpath)  #同时将文件下载到本地路径中
                    else:  #本地对应目录已存在,则直接下载
                        if self.isDir(self.sftp, r_f): 
                            self.downloadDir(downpath, r_f)
                        else:
                            self.sftp.get(r_f, downpath)
            self.sftp.chdir('..')
            return True
    

    将下载的文件更新到本地对应的文件中

    采用深度遍历的方法,从临时文件夹中将从sftp下载的文件依次更新到项目中:

    def updateFiles(localDir,downDir):  # 更新文件
        stack = []  #创建栈
        stack.append(downDir)  #将下载的文件路径压入栈中,准备遍历
        while True:
            if len(stack) == 0:
                shutil.rmtree(os.path.abspath('.') + r'\backup')  # 表示更新完成,栈中已经没有内容,则删除备份文件夹
                return True
            dir_ = stack.pop()
            ds = os.listdir(dir_)
            for dname in ds:
                dpath = os.path.join(dir_,dname)  # 下载下来的文件路径
                # backup在这里是我们设置的临时文件夹,我们要从其后匹配出本地项目中有的路径,与本地路径拼接
                relative_path = re.compile(r'.+\\backup(.+)').findall(dpath)[0]
                wpath = localDir+relative_path  # 要更新的文件路径
                if os.path.isdir(dpath):
                    if not os.path.exists(wpath):
                        os.makedirs(wpath)
                    stack.append(dpath)  # 是目录则加入栈中
                else:
                    try:
                         #打开本地文件同时读取下载的文件写入到本地文件,这一步不能分开执行,否则会造成文件丢失
                        open(wpath,'wb').write(open(dpath, 'rb').read())  
                    except Exception as e:
                        print(e)
                        return False
    

    在项目运行中更新文件

    这里将调用更新放在了后台定时任务中,设定情景:定期请求中心服务器获取当前项目的最新版本号和sftp服务器地址信息,本地config文件中配有当前项目的版本号,进行对比,如果版本不同,则去从sftp服务器下载文件更新到项目中,同时更新本地版本号。这里只写了任务,任务添加到任务对象中就不写了:

    impot config
    Now_ver = config.VER
    def updateVer(self):
        r = requests.get(url_updatefile, timeout=TIMEOUT)
        res_dict = json.loads(r.text)
        print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), '获取项目文件最新版本...')
    
        if res_dict['status'] == 0:
            new_ver = res_dict['data']['version']
            ftp = res_dict['data']['ftp']
            # 将本地版本号与远程版本号对比
            if int(new_ver) == int(Now_ver):  # 已经是最新版本
                pass
            else:
                try:
                    #从中心服务器请求到的sftp是链接形式的:sftp://user:passwd@host:port/远程地址
                    regex = re.compile(r'sftp://(\w+):(\w+)@(.*?):(\d+)/(.*)')  #使用正则提取关键信息
                    m_s = regex.findall(ftp)
                    print(m_s)
                    username, password, host, port, remoteDir = m_s[0]
                    f = UpdateFile(host, username, password, int(port))  #链接sftp
                    downtag = f.downloadDir(os.path.abspath('.')+r'\backup', '/'+remoteDir)  #下载文件到本地临时文件夹
                    if downtag:  #如果下载完成,则将临时文件夹中的内容更新到项目中
                        updatetag = updateFiles(os.path.abspath('.'), os.path.abspath('.')+r'\backup')
                        if updatetag:  #如果项目也更新成功,则将最新版本号写入到config文件中
                            # 更新版本号
                            with open('config.py', 'r+',encoding='utf-8') as s:
                                lines = s.readlines()
                                s.seek(0, 0)
                                for line in lines:
                                    line_new = line.replace('VER = '+str(Now_ver), 'VER = '+new_ver)
                                    s.write(line_new)
                            # time.sleep(2)
                            # os.system('../reload.bat')
                        else:
                            pass
                    else:
                        pass
                except Exception as e:
                    print(e)
                    ext.writelog('更新文件出错!')
    

    以上就是完整的在项目运行过程中定期从sftp下载有更新的文件,并将更新的文件同步到本地项目中。

    展开全文
  • 记录一次linux服务器连sftp下载cvs文件到本地 首先进入Xshell 使用跳板机连上远程服务器,之后使用sftp 连上 进来之后 sftp> ls sftp sftp> cd sftp/ 如上,进入想导出文件的目录下找到想导出的文件 然后...
  • 现在很多开发的程序都在Linux服务器上面,开发者使用编辑器(Sublime Text、phpStorm、...第一步:先在本地创建一个文件夹,用sublime打开-把文件夹拖sublime中第二步:右键左侧sidbar中这个文件图标,选择SFTP/FTP...
  • sftp连接服务器下载文件到本地

    千次阅读 2020-08-17 15:42:22
    do SERVER_IP=`echo $i | cut -f 1 -d ","` LOCAL_PATH=`echo $i | cut -f 2 -d ","` lftp -u ${USERNAME},${PASSWORD} sftp://${SERVER_IP}:22${DATA_PATH} get ${File_NAME} get ${File_NAME15} get ${File_NAME...
  • sftp服务器下载文件本地电脑

    万次阅读 2017-12-11 20:07:52
    第一步:登陆sftp服务器并且下载文件本地服务器 参见:手把手教你使用 SFTP 安全地传输文件第二步:下载文件本地电脑 参见:利用SecureCRT上传、下载文件(使用sz与rz命令)
  • 利用ssh协议和sftp服务,将日志文件夹里的文件同步到本地存储,检查时间-4至1 过滤条件:时间戳(20180101),与本地文件名全等 源码展示: #!/usr/bin/env python # -*- coding :uft-8 -*- import ...
  • sftp下载到本地的zip文件是没问题的,用压缩工具打开能查看里面的文件,为什么就是读取不了呢? java从sftp下载zip文件本地磁盘代码: import java.io.InputStream; import java.util.Date; import ...
  • 1、将sftp文件无法保存到本地 2、无法删除本地文件问题 二、问题分析 问题1由于在代码中没有对应的父级目录,导致创建本地文件失败 问题2由于FileOutputStream 在写文件后,io没有关闭, 导致文件一直有引用而无法...
  • 前一篇文章写了windows中利用freeSSHd搭建本地sftp服务器 ...这里再写一下利用php实现从sftp下载和上传文件 sftp类 <?php class sftpData{ private $config; private $connect = NULL; private $re...
  • 下载Linux服务器上的文件到本地 Linux服务器上的操作 sftpxxxxx@jumper.xxxx.com 使用put命令进行文件上传,put app.log 本地操作 sftpxxxxx@jumper.xxxx.com 使用get命令进行文件下载,get app.log 参考...
  • 需求:A服务器会定时生成一个...2.数据存到本地后可以使用oracle自带的sqloader来加载文件到数据库中。也可以选择dblink,网上说效率没这个高。未亲测。实施:1.写一个sqlloader的控制文件,取名为res_count.ctlOPT...
  • sftp的使用-本地与远程服务器之间的文件传输如何将本地pc上的文件通过sftp上传到linux服务器如何将linux服务器上的文件下载到本地pc上SecureCRT 工具:打开会话窗口设置服务器设置本地PC的目录这个地址用于将该目录...
  • 使用sftp命令上传文件夹方法发布时间:2020-08-05 02:24:03来源:ITPUB博客阅读:138作者:ouyida3# 前言sftp上传单个文件使用put,多个文件可使用mput,但是要上传整个文件夹,则比较复杂,需要使用多个命令组合,...
  • 采用SFTP定时扫描本地文件,同时判断本地文件是否传输完成,如果传输完成,则向服务器开始上传本地文件,.bat启动,包含配置文件等,已通过公司测试
  • sftp下载文件 java

    2018-11-27 20:30:31
    角色:服务器A,服务器B,...所以我们需要将A的文件下载到B上,然后再下载到本地C。 JSch jsch = new JSch(); com.jcraft.jsch.Session session = jsch.getSession("youruserName", "IP", ...
  • 文章目录使用 scp 命令使用 sftp 命令方法1:打开命令终端,直接输入 sftp 命令语句方法2:打开命令终端后,通过菜单执行 sftp 命令 使用 scp 命令 liaowenxiong@liaowenxiongdeMacBook-Air ~ % scp /Users/...
  • 使用sftp下载文件

    万次阅读 2017-05-25 15:39:40
    1、在终端下,输入命令: sftp username@hostname 2、回车后要求输入密码,输入密码后进入... 3、我需要将根目录下的AAA文件夹下载到本地,输入命令: get -r AAA 如果不是文件夹就不需要-r参数 4、等待下载完成。
  • import paramiko ... sftp = paramiko.SFTPClient.from_transport(t)# sftp传输协议 src = remote_path des = local_path sftp.get(src,des) #sftp.put(local_path,remote_path) t.close()
  • SHELL脚本sftp下载文件

    千次阅读 2020-04-26 19:56:37
    实现效果:sftp远程登录服务器,获取文件下载到本地,并删除远程端文件 连接sftp利用私钥登录命令: sftp -oIdentityFile=私钥地址 -oPort=端口 用户名@ip # 如: sftp -oIdentityFile=/weblogic/ftppwdadr -oPort...
  • sftp下载文件

    2018-07-25 15:48:26
    $conf = $this->getSftpConfig(); $conn = ssh2_connect($conf['host'],$conf['port']); if (!ssh2_auth_password($conn, $conf['user'], $conf['...//远程文件 拷贝到本地 copy($resource, $this->localFile);

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,353
精华内容 8,541
关键字:

sftp下载文件到本地