JAVA/SPRING/JAVA

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

junhokim 2017. 11. 29. 20:20
반응형

SFTPHandler.java



  /**

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

     *

     * @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();


    }

반응형