zoukankan      html  css  js  c++  java
  • 使用SFTP上传文件到服务器的简单使用

    最近用到SFTP上传文件查找了一些资料后自己做了一点总结,方便以后的查询

        /**
         * 将文件上传到服务器
         * 
         * @param filePath
         *            文件路径
         * @param channelSftp
         *            channelSftp对象
         * @return
         */
        public static boolean uploadFile(String filePath, ChannelSftp channelSftp) {
            OutputStream outstream = null;
            InputStream instream = null;
            boolean successFlag = false;
            try {
                File isfile = new File(filePath);
    
                if (isfile.isFile()) {
                    outstream = channelSftp.put(isfile.getName());
                    File file = new File(filePath);
                    if (file.exists()) {
                        instream = new FileInputStream(file);
                        byte b[] = new byte[1024];
                        int n;
                        while ((n = instream.read(b)) != -1) {
                            outstream.write(b, 0, n);
                        }
                        outstream.flush();
                    }
                    successFlag = true;
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (instream != null) {
                        instream.close();
                    }
                    if (outstream != null) {
                        outstream.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
            return successFlag;
        }
    
        private static Session initJschSession()
                throws JSchException {
    
            int ftpPort = 0;
            String ftpHost = "";
            String port = "00";   //sftp的端口号
            String ftpUserName = "";  //用户名
            String ftpPassword = "";  //链接的密码
            String privateKey = "";   //
            String passphrase = "";
            if (port != null && !port.equals("")) {
                ftpPort = Integer.valueOf(port);
            }
            JSch jsch = new JSch(); // 创建JSch对象
            if (StringUtils.isNotBlank(privateKey)
                    && StringUtils.isNotBlank(passphrase)) {
                jsch.addIdentity(privateKey, passphrase);
            }
    
            if (StringUtils.isNotBlank(privateKey)
                    && StringUtils.isBlank(passphrase)) {
                jsch.addIdentity(privateKey);
            }
            jsch.getSession(ftpUserName, ftpHost, ftpPort);
            Session session = jsch.getSession(ftpUserName, ftpHost, ftpPort); // 根据用户名,主机ip,端口获取一个Session对象
            if (StringUtils.isNotBlank(ftpPassword)) {
                session.setPassword(ftpPassword); // 设置密码
            }
            return session;
    
        }
    
        /**
         * 获取ChannelSftp链接
         * 
         * @param timeout
         *            超时时间
         * @return 返回ChannelSftp对象
         * @throws JSchException
         */
        public static ChannelSftp getChannelSftp(Session session, int timeout)
                throws JSchException {
    
            Channel channel = null;
            
            Properties config = new Properties();
            config.put("StrictHostKeyChecking", "no");
            session.setConfig(config); // 为Session对象设置properties
            session.setTimeout(timeout); // 设置timeout时间
            session.connect(); // 通过Session建立链接
    
            channel = session.openChannel("sftp"); // 打开SFTP通道
            channel.connect(); // 建立SFTP通道的连接
            return (ChannelSftp) channel;  
        }
    
        /**
         * 断开sftp链接
         * 
         * @param session
         *            会话
         * @param channel
         *            通道
         */
        public static void closeConnection(Channel channel, Session session) {
            try {
                if (session != null) {
                    session.disconnect(); //关闭session链接
                }
                if (channel != null) {
                    channel.disconnect();  //断开连接
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    这里的用户名密码都是自己设置,这里的方法进行了简单的封装,方便使用

  • 相关阅读:
    Cortex-M3 在C中上报入栈的寄存器和各fault状态寄存器
    Cortex-M3 双堆栈指针(MSP&PSP)
    Cortex-M3 异常返回值EXC_RETURN
    Cortex-M3 异常中断响应与返回
    Cortex-M3 操作模式与特权等级
    Cortex-M3 R0~R15寄存器组 & 特殊功能寄存器组
    【Python】批量修改指定目录下所有文件的文件名/后缀
    【EMV L2】EMV终端数据
    【EMV L2】Cardholder Verification Rule(CVR) Format
    【EMV L2】GPO响应以及AIP、AFL
  • 原文地址:https://www.cnblogs.com/tangkai/p/3339285.html
Copyright © 2011-2022 走看看