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

這里的用戶名密碼都是自己設置,這里的方法進行了簡單的封裝,方便使用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM