개발자의 끄적끄적

[java] SFTP 파일업로드/다운로드 [펌] 본문

개발/java & jsp

[java] SFTP 파일업로드/다운로드 [펌]

효벨 2020. 1. 11. 01:00
728x90
반응형

[java] SFTP 파일업로드/다운로드 [펌]

 

프로젝트 진행중 sftp를 통한 파일 업로드를 해야되는 부분이 있어서

 

참고하고자 퍼왔습니다!

 

유용하게 참고하겠습니다.

 

다른분들도 개발에 도움들 되시길 바래요!

 

출처는 아래 명시했습니다!!

 

 

 

 

SFTP 파일업로드/다운로드

 

SFTP 서버에 연결하여 파일다운로드/업로드하는 소스입니다.

 

SFTP는 기존의 FTP 에서 보안(secure)을 강화한것으로 기본포트가 FTP는 21번이지만 SFTP는 22번입니다.

 

아래 사이트에서 jar를 받아서 사용하시면 됩니다.

 

http://www.jcraft.com/jsch/

 

1) SFTP 서버 접속

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;

import cres.com.context.ApplicationContextProvider;

public class FTPUtil{

    private final Logger LOGGER = LoggerFactory.getLogger(this.getClass());

    private Session session = null;
    private Channel channel = null;
    private ChannelSftp channelSftp = null;

   // SFTP 서버연결 
    public void init(){
        String url = "...";
        String user = "...";
        String password = "...";

        System.out.println(url); 
        //JSch 객체 생성
        JSch jsch = new JSch();
        try {
            //세션객체 생성 ( user , host, port )     
            session = jsch.getSession(user, url);

            //password 설정
            session.setPassword(password);

            //세션관련 설정정보 설정
            java.util.Properties config = new java.util.Properties();

            //호스트 정보 검사하지 않는다.
            config.put("StrictHostKeyChecking", "no");
            session.setConfig(config);

            //접속
            session.connect();

            //sftp 채널 접속
            channel = session.openChannel("sftp");
            channel.connect();

        } catch (JSchException e) {
            e.printStackTrace();
        }
        channelSftp = (ChannelSftp) channel;

    }

    // 단일 파일 업로드 
    public void upload( String dir , File file){
        FileInputStream in = null;

        try{ //파일을 가져와서 inputStream에 넣고 저장경로를 찾아 put 
            in = new FileInputStream(file);
            channelSftp.cd(dir);
            channelSftp.put(in,file.getName());
        }catch(SftpException se){
            se.printStackTrace();
        }catch(FileNotFoundException fe){
            fe.printStackTrace();
        }finally{
            try{
                in.close();
            } catch(IOException ioe){
                ioe.printStackTrace();
            }
        }
    }

    // 단일 파일 다운로드 
    public InputStream download(String dir, String fileNm){
        InputStream in = null;
        String path = "...";
        try{ //경로탐색후 inputStream에 데이터를 넣음
            channelSftp.cd(path+dir);
            in = channelSftp.get(fileNm);

        }catch(SftpException se){
            se.printStackTrace();
        }

        return in;
    }

    // 파일서버와 세션 종료
    public void disconnect(){
        channelSftp.quit();
        session.disconnect();
    }

 

출처: https://javacpro.tistory.com/22 [버물리의 IT공부]

반응형
Comments