개발자의 끄적끄적

[java] SFTP 사용방법 (jsch 라이브러리 사용) 본문

개발/java & jsp

[java] SFTP 사용방법 (jsch 라이브러리 사용)

효벨 2020. 2. 29. 02:00
728x90
반응형

[java] SFTP 사용방법 (jsch 라이브러리 사용)

 

  /**

     * 서버와 연결에 필요한 값들을 가져와 초기화 시킴

     *

     * @param host

     *            서버 주소

     * @param userName

     *            접속에 사용될 아이디

     * @param password

     *            비밀번호

     * @param port

     *            포트번호

     */

    public void init(String host, String userName, String password, int port) {

        JSch jsch = new JSch();

        try {

            session = jsch.getSession(userName, host, port);

            session.setPassword(password);

 

            java.util.Properties config = new java.util.Properties();

            config.put("StrictHostKeyChecking", "no");

            session.setConfig(config);

            session.connect();

 

            channel = session.openChannel("sftp");

            channel.connect();

 

            channelSftp = (ChannelSftp) channel;            

        } catch (JSchException e) {

            e.printStackTrace();

        }

    }

 

 

 /** create by Junho

     * 헤당 경로가 없으면 mkdir 하는 함수 리턴값 : fullpath

     * @param path

     * @return

     * @throws SftpException

     */

    

    public String mkdirDir(String path) throws SftpException {

     String[] pathArray = path.split("/");

     String currentDirectory = channelSftp.pwd();

 

     String totPathArray = "";

     for(int i =0; i< pathArray.length; i++) {

     totPathArray += pathArray[i] + "/";

String currentPath = currentDirectory+ "/" + totPathArray;

     try {

channelSftp.mkdir(currentPath);

channelSftp.cd(currentPath);

} catch (Exception e) {

channelSftp.cd(currentPath);

}

     }

    

     return currentDirectory+ "/" + totPathArray;

}

 

 

 

/**

     * 단일 파일을 업로드

     *

     * @param file

     *            저장시킬 파일

     * @param dir

     *            저장시킬 주소(서버)

     */

    public boolean uploadFile(MultipartFile file, String fileName, String dir) {

     boolean result = true;

        InputStream in = null;

        try {

            //fileName = URLEncoder.encode(fileName,"EUC-KR");

        

            in = file.getInputStream();

            channelSftp.cd(dir);

            channelSftp.put(in, fileName);

            

        } catch (Exception e) {

            e.printStackTrace();

            result = false;

        } finally {

            try {

                in.close();

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

        

        return result;

    }

 

 

 /**

     * 단일 파일 다운로드

     *

     * @param dir

     *            저장할 경로(서버)

     * @param downloadFileName

     *            다운로드할 파일

     * @param path

     *            저장될 공간

     */

    public boolean download(String dir, String downloadFileName, String path) {

     boolean result = true;

    

        InputStream in = null;

        FileOutputStream out = null;

        try {

            channelSftp.cd(dir);

            

            in = channelSftp.get(downloadFileName);

        } catch (SftpException e) {

            e.printStackTrace();

            result = false;

        }

 

        try {

            out = new FileOutputStream(new File(path));

            int data; 

byte b[] = new byte[2048];

while((data = in.read(b, 0, 2048)) != -1) { 

out.write(b, 0, data); 

out.flush();

}

 

        } catch (IOException e) {

            e.printStackTrace();

            result = false;

        } finally {

            try {

                out.close();

                in.close();

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

        

        return result;

    }

 

  /**

     * 서버와의 연결을 끊는다.

     */

    public void disconnection() {

        channelSftp.quit();

 

    }

 

 

출처 : https://penthegom.tistory.com/3

반응형
Comments