使用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();

        }

    }

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

你可能感兴趣的:(上传文件)