써먹는 웹개발

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

웹개발/Java & Jsp

[Java] SFTP 파일업로드/다운로드

kmhan 2023. 10. 11. 15:05


728x90
반응형
 SFTP는 기존의 FTP 에서 보안(secure)을 강화한것으로 기본포트가 FTP는 21번이지만 SFTP는 22번입니다.
 
 아래 사이트에서 jar를 받아서 사용하시면 됩니다.
 
 
1) SFTP 서버 접속
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
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();
    }
cs

 

출처 : https://javacpro.tistory.com/22

728x90
반응형


Comments