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();
}