[FTP]

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.SocketException;

@Slf4j
public class FTPUploader {
private String serverIp;
private int serverPort;
private String user;
private String password;

public FTPUploader(String serverIp, int serverPort, String user, String password) {
this.serverIp = serverIp;
this.serverPort = serverPort;
this.user = user;
this.password = password;
}
public boolean upload(File fileObj, String fileName, String fileLocation) throws SocketException, IOException, Exception {
FileInputStream fis = null;
FTPClient ftpClient = new FTPClient();


try {
ftpClient.setControlEncoding("EUC-KR");
ftpClient.connect(serverIp, serverPort); //ftp 연결
ftpClient.setControlEncoding("EUC-KR");
int reply = ftpClient.getReplyCode(); //응답코드받기

log.info("reply:{}",reply);
if (!FTPReply.isPositiveCompletion(reply)) { //응답이 false 라면 연결 해제 exception 발생
ftpClient.disconnect();
throw new Exception(serverIp+" FTP 서버 연결 실패");
}

ftpClient.setSoTimeout(1000 * 10); //timeout 설정
ftpClient.login(user, password); //ftp 로그인
try{
ftpClient.makeDirectory(fileLocation);
}catch(Exception e){
e.printStackTrace();
}
ftpClient.changeWorkingDirectory(fileLocation);
ftpClient.setFileType(FTP.BINARY_FILE_TYPE); //파일타입설정
ftpClient.enterLocalPassiveMode(); //active 모드 설정

fis = new FileInputStream(fileObj);
log.info("fileName:{}",fileName);
return ftpClient.storeFile(fileName, fis); //파일 업로드
} finally {
if (ftpClient.isConnected()) {
ftpClient.disconnect();
}
if (fis != null) {
fis.close();
}
}
}

}

 

[SFTP]

 

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


import com.jcraft.jsch.*;



public class SFTPUploader {

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

// SFTP 서버연결
public void init(String url,String user, String password, int port) {

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

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


//호스트 정보 검사하지 않는다.

session.setConfig("StrictHostKeyChecking", "no");

//접속
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 void mkdir(String path) throws SftpException {
ChannelSftp channelSftp = (ChannelSftp)channel;
SftpATTRS attrs=null;
try {
attrs = channelSftp.stat(path);
} catch (Exception e) {
System.out.println(path+" not found");
}
if (attrs != null) {
System.out.println("Directory exists IsDir="+attrs.isDir());
} else {
System.out.println("Creating dir "+path);
channelSftp.mkdir(path);
}
}


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

}

 

+ Recent posts