zoukankan      html  css  js  c++  java
  • sftp上传

    1、搭建本地sftp

      1.1、下载msftpsrvr.exe软件

          下载地址:http://www.download3k.com/Install-Core-FTP-Mini-SFTP-Server.html

          

      1.2、双击msftpsrvr.exe,录入sftp信息

        

    2、工具类

    SftpUploadUtil

    package com.hundsun.channel.util;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.util.Properties;
    import java.util.Vector;
    
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    
    import com.jcraft.jsch.Channel;
    import com.jcraft.jsch.ChannelSftp;
    import com.jcraft.jsch.JSch;
    import com.jcraft.jsch.JSchException;
    import com.jcraft.jsch.Session;
    import com.jcraft.jsch.SftpException;
    
    public class SftpUploadUtil {
        
        public static final Log logger = LogFactory.getLog(SftpUploadUtil.class);
        
        /**
         * 连接sftp服务器
         * @param host 主机
         * @param port 端口
         * @param username 用户名
         * @param password 密码
         * @param privateKey 密钥文件路径
         * @param passphrase 密钥口令
         * @return
         */
        public ChannelSftp connect(String host, int port, String username,String password,String privateKey,String passphrase) {
         ChannelSftp sftp = null;
         try {
          JSch jsch = new JSch();
          jsch.getSession(username, host, port);
          if (privateKey != null && !"".equals(privateKey)) {
              //使用密钥验证方式,密钥可以使有口令的密钥,也可以是没有口令的密钥
              if (passphrase != null && !"".equals(passphrase)) {
                  jsch.addIdentity(privateKey, passphrase);
              } else {
                  jsch.addIdentity(privateKey);
              }
          }      
          
          Session sshSession = jsch.getSession(username, host, port);
          System.out.println("Session created.");
          if (password != null && !"".equals(password)) {
              sshSession.setPassword(password);
          }      
          Properties sshConfig = new Properties();
          sshConfig.put("StrictHostKeyChecking", "no");
          sshSession.setConfig(sshConfig);
          sshSession.connect();
          System.out.println("Session connected.");
          System.out.println("Opening Channel.");
          Channel channel = sshSession.openChannel("sftp");
          channel.connect();
          sftp = (ChannelSftp) channel;
          System.out.println("Connected to " + host + ".");
          //System.out.println("登录成功");
         } catch (Exception e) {
             System.out.println("------");
             e.printStackTrace();
         }
         return sftp;
        }
    
        /**
         * 关闭
         * @param sftp
         * @param sshSession
         * @throws JSchException 
         */
        public void close(ChannelSftp sftp) throws JSchException {
            if (null!=sftp) {
                if (null!=sftp.getSession()) {
                    sftp.getSession().disconnect();
                }   
                sftp.disconnect();
            }
    
        }
    
        
        
        
        /**
         * 上传文件
         * @param directory 上传的目录
         * @param uploadFile 要上传的文件
         * @param sftp
         */
        public void upload(String directory, String uploadFile, ChannelSftp sftp) {
         try {
          sftp.cd(directory);
          File file=new File(uploadFile);
          sftp.put(new FileInputStream(file), file.getName());
          System.out.println("上传成功!");
         } catch (Exception e) {
          e.printStackTrace();
         }
        }
    
        /**
         * 下载文件
         * @param directory 下载目录
         * @param downloadFile 下载的文件
         * @param saveFile 存在本地的路径
         * @param sftp
         */
        public void download(String directory, String downloadFile, String saveFile, ChannelSftp sftp) {
            try {
                logger.info("下载目录:" + directory + ",下载文件:" + downloadFile + ",存本地路径:" + saveFile);
                sftp.cd(directory);
                File file = new File(saveFile);
                sftp.get(downloadFile, new FileOutputStream(file));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 删除文件
         * @param directory 要删除文件所在目录
         * @param deleteFile 要删除的文件
         * @param sftp
         */
        public void delete(String directory, String deleteFile, ChannelSftp sftp) {
         try {
          sftp.cd(directory);
          sftp.rm(deleteFile);
         } catch (Exception e) {
          e.printStackTrace();
         }
        }
     
        /**
         * 列出目录下的文件
         * @param directory 要列出的目录
         * @param sftp
         * @return
         * @throws SftpException
         */
        public Vector listFiles(String directory, ChannelSftp sftp) throws SftpException{
         return sftp.ls(directory);
        }
        
        /**
         * 创建文件夹
         * @param sftp
         * @param directory
         * @throws SftpException 
         */
        public void createFolder(ChannelSftp  sftp,String directory) throws SftpException {
                  
            sftp.mkdir(directory);
        }   
        
         
        public static void main(String[] args) {
            
            /*
            Vector<LsEntry> vector = new Vector<LsEntry>();
            String host="192.168.54.112";
            int port=22;
            String username="wjs";
            String password="wjs@567";
            //上传的目录
            String directory="/home/wjs/upload/1001/"+DateUtil.getDateTime("yyyyMMdd", new Date());
            System.out.println("directory:--------------"+directory);
            
            //要上传的文件
            String uploadFile="F:\upload\1001\20151102\info_1001_9000_20151102.txt";
    
            SftpUploadUtil sf = new SftpUploadUtil(); 
            
            //获取连接   
            ChannelSftp  sftp = sf.connect(host, port, username, password); 
          
            //创建文件夹
            try {
                //home/wjs/upload/1001
                vector = sftp.ls(directory);
            } catch (SftpException e) {
                // TODO Auto-generated catch block
                if (e.id == 2 || "No such file".equals(e.getMessage())) {
                    Iterator<LsEntry> it = vector.iterator();
                    while (it.hasNext()) {
                        LsEntry lsEntry = it.next();
                        System.out.println(lsEntry.getLongname());
                        System.out.println(lsEntry.getLongname().startsWith("d"));
                    }
                    try {
                        sftp.mkdir(directory);
                        //上传文件   
                        sf.upload(directory, uploadFile, sftp);
                        File file = new File(uploadFile);
                        long fileSize = file.length();
    
                        sftp.put(directory + "/info_1001_9000_20151026.txt", new FileProgressMonitor(
                            fileSize), ChannelSftp.OVERWRITE);
                        sftp.quit();
                        sf.close(sftp);
                    } catch (SftpException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    } catch (JSchException e2) {
                        // TODO Auto-generated catch block
                        e2.printStackTrace();
                    }
                }
            } 
        */}
    }
    View Code

    3、测试连接

        public static void main(String[] args) throws Exception {
            SftpUploadUtil sfUtil = new SftpUploadUtil();
            String sftpHost = "10.23.10.39";
            int sftpPort = 22; // 端口表字段暂时未定义
            String sftpUserName = "quanbs";
            String password = "123456";
            String privateKey = ""; // 秘钥文件路径
            String passphrase = ""; // 秘钥口令
            ChannelSftp sftp = sfUtil.connect(sftpHost, sftpPort, sftpUserName, password, privateKey, passphrase);
        }

    运行结果(连接成功):

    4、测试sftp上传

        public static void main(String[] args) throws Exception {
            SftpUploadUtil sfUtil = new SftpUploadUtil();
            String sftpHost = "10.23.10.39";
            int sftpPort = 22; // 端口表字段暂时未定义
            String sftpUserName = "quanbs";
            String password = "123456";
            String privateKey = ""; // 秘钥文件路径
            String passphrase = ""; // 秘钥口令
            ChannelSftp sftp = sfUtil.connect(sftpHost, sftpPort, sftpUserName, password, privateKey, passphrase);
            
            // 测试sftp上传
            testUploadFile(sfUtil, sftp);
        }
        /**
         * 测试上传文件
         * @param sfUtil
         * @param sftp
         * @throws SftpException
         */
        public static void testUploadFile(SftpUploadUtil sfUtil, ChannelSftp sftp) throws SftpException{
            String sftpDirectory = "E:"+File.separator+"sftp";
            sftpDirectory = "\";
            String uploadFile = "D:\log.zip";
            List lsList = getLsListName(File.separator, sftp); // 获取目录下的文件名List
            String date = DateUtils.convertDateToLong(new Date(), "yyyyMMdd").toString(); // 当天文件夹 20161026
            if (!lsList.contains(date)) // 当天日期文件夹不存在则创建
                sftp.mkdir(date);
            
            sftpDirectory += date;
            
            sfUtil.upload(sftpDirectory, uploadFile, sftp);
            
        }
        /**
         * 获取目录下的文件名List
         * @param path 目录
         * @param sftp
         * @throws SftpException
         */
        private static List<String> getLsListName(String path, ChannelSftp sftp) throws SftpException{
            List<String> list = new ArrayList<String>();
            Vector vector = sftp.ls(File.separator);
            Iterator<LsEntry> it = vector.iterator();
            while (it.hasNext()) {
                LsEntry lsEntry = it.next();
                list.add(lsEntry.getFilename());
            }
            return list;
        } 

    运行结果:

     附:

    DateUtils

    package com.hundsun.channel.util;
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class DateUtils {
    
        public static SimpleDateFormat FORMAT_DATE = new SimpleDateFormat("yyyy-MM-dd");
    
        public static SimpleDateFormat FORMAT_DATETIME = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
        public static SimpleDateFormat FORMAT_DATE_SIMPLE = new SimpleDateFormat("yyyyMMdd");
    
        public static SimpleDateFormat FORMAT_DATETIME_SIMPLE = new SimpleDateFormat("yyyyMMddHHmmss");
    
        public static SimpleDateFormat FORMAT_DATE_CN = new SimpleDateFormat("yyyy��MM��dd��");
    
        public static SimpleDateFormat FORMAT_DATETIME_CN = new SimpleDateFormat("yyyy��MM��dd��HHʱmm��ss��");
    
        public static SimpleDateFormat FORMAT_DATETIME_HOUR = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    
        public static Date getDateTime(String dateStr, SimpleDateFormat format) {
            Date date = null;
            try {
                date = format.parse(dateStr);
            } catch (ParseException e) {
                return null;
            }
            return date;
        }
    
        public static String getDateTimeStr(Date date, SimpleDateFormat format) {
            if (date == null || format == null) {
                return null;
            }
            return format.format(date);
        }
    
        public static Date getDate(String dateStr) {
            if (dateStr == null || "".equals(dateStr)) {
                return null;
            }
            return getDateTime(dateStr, FORMAT_DATE);
        }
    
        public static Date getDateTime(String dateStr) {
            return getDateTime(dateStr, FORMAT_DATETIME);
        }
    
        public static String getDateStr(Date date) {
            return getDateTimeStr(date, FORMAT_DATE);
        }
    
        public static String getDateTimeStr(Date date) {
            return getDateTimeStr(date, FORMAT_DATETIME);
        }
    
        public static long getDiffDays(Date startTime, Date endTime) {
            long quot = 0;
            if (startTime == null || endTime == null) {
                return quot;
            }
            SimpleDateFormat ft = new SimpleDateFormat("yyyy/MM/dd");
            try {
                Date endDate = ft.parse(ft.format(endTime));
                Date startDate = ft.parse(ft.format(startTime));
                quot = endDate.getTime() - startDate.getTime();
                quot = quot / 1000 / 60 / 60 / 24;
            } catch (ParseException e) {
                e.printStackTrace();
            }
            return quot;
        }
    
        public static Long convertDateToLong(Date date, String format) {
            SimpleDateFormat ft = new SimpleDateFormat(format);
            String formatStr = ft.format(date);
            long parseLong = Long.parseLong(formatStr);
            return parseLong;
        }
    
        public static Long convertDateToLong(Date date) {
            String formatStr = FORMAT_DATETIME_SIMPLE.format(date);
            long parseLong = Long.parseLong(formatStr);
            return parseLong;
        }
    }
    View Code

    待完,很粗糙的东西 ,花了10分钟整理了下,要赶最后一班地铁回家了。 又是漫长的1个半小时。。。。 

  • 相关阅读:
    Neutron 理解 (1): Neutron 所实现的虚拟化网络 [How Netruon Virtualizes Network]
    openstack里面的Provider network 和 Tenant network 的区别
    Openstack网络相关概念比较复杂,经常使人混淆,本文进行相关说明。
    OpenStack 网络:Neutron 初探
    openstack 网络架构 nova-network + neutron
    Java 性能测试的四项原则
    微信公众号开发之微信买单
    微信公众号开发之如何使用JSSDK
    微信公众号开发之如何一键导出微信所有用户信息到Excel
    [内核驱动] 链表LIST_ENTRY的操作(转)
  • 原文地址:https://www.cnblogs.com/frank-quan/p/6002141.html
Copyright © 2011-2022 走看看