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();
            }
        }

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

  • 相关阅读:
    LLVM生成中间码以及汇编代码
    汇编知识
    delphi 连接 c++ builder 32 生成obj文件
    新知识
    Java的Guid生成
    sql:一对多【转载】
    关于使用js完成购物车计算时的一些问题。
    mysql多条件查询,当某个条件为空时忽略该条件,所有条件为空时查询全部
    转载:获取用户的真实ip地址
    ssh 报错hibernate java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to XXX
  • 原文地址:https://www.cnblogs.com/tangkai/p/3339285.html
Copyright © 2011-2022 走看看