티스토리 뷰

IT/JAVA

[JAVA]SFTP 파일 업로드 하기

Kanzler 2016. 11. 15. 07:00

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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
 
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
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;
 
/**
 * 서버와 연결하여 파일을 업로드하고, 다운로드한다.
 *
 */
 public class SFTPClient{
     private Session session = null;
 
    private Channel channel = null;
 
    private ChannelSftp channelSftp = null;
 
    /**
     * 서버와 연결에 필요한 값들을 가져와 초기화 시킴
     *
     * @param host
     *            서버 주소
     * @param userName
     *            접속에 사용될 아이디
     * @param password
     *            비밀번호
     * @param port
     *            포트번호
     */
     public void init(String host, String userName, String password, int port) throws JSchException,Exception  {
         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();
         } catch (JSchException e) {
             e.printStackTrace();
         }
 
        channelSftp = (ChannelSftp) channel;
 
    }
 
    /**
     * 하나의 파일을 업로드 한다.
     *
     * @param dir
     *            저장시킬 주소(서버)
     * @param file
     *            저장할 파일
     */
     public boolean upload(String dir, File file)  throws SftpException,FileNotFoundException,Exception{
 
        FileInputStream in = null;
         try {
             in = new FileInputStream(file);
             channelSftp.cd(dir);
             channelSftp.put(in, file.getName());
             return true;
         } catch (SftpException e) {
             e.printStackTrace();
             return false;
         } catch (FileNotFoundException e) {
             e.printStackTrace();
             return false;
         } catch (Exception e) {
            // TODO: handle exception
             return false;
        } 
         finally {
             if (channelSftp.isConnected()) {
                 channelSftp.disconnect();
             }             
             try {
                 in.close();
             } catch (IOException e) {
                 e.printStackTrace();
             }
         }
     }
 
    /**
     * 하나의 파일을 다운로드 한다.
     *
     * @param dir
     *            저장할 경로(서버)
     * @param downloadFileName
     *            다운로드할 파일
     * @param path
     *            저장될 공간
     */
     public void download(String dir, String downloadFileName, String path) {
         InputStream in = null;
         FileOutputStream out = null;
         try {
             channelSftp.cd(dir);
             in = channelSftp.get(downloadFileName);
         } catch (SftpException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
 
        try {
             out = new FileOutputStream(new File(path));
             int i;
 
            while ((i = in.read()) != -1) {
                 out.write(i);
             }
         } catch (IOException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         } finally {
             try {
                 out.close();
                 in.close();
             } catch (IOException e) {
                 e.printStackTrace();
             }
 
        }
 
    }
 
    /**
     * 서버와의 연결을 끊는다.
     */
     public void disconnection() {
         channelSftp.quit();
 
    }
 }
 
 
cs


댓글