2013/08/13 11:35

apache commons-net을 이용한 FTP전송 처리. JAVA



신규 프로젝트에서 표준프레임워크 기능에 없는
FTP 전송에 관한 기능 요구사항이 있어,,
프레임워크에 해당 기능을 추가하였다.

생각보다 수월하게 추가하고 테스트 완료.. 

일단 메이븐을 사용하기 떄문에 최신의 라이브러리를
가져오도록 dependency 추가..
---------------------------
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.3</version>
</dependency>
---------------------------

코드는 아래와 같다.. 
---------------------------
public class FtpService {
//로거 선언
private static final Logger LOGGER = LoggerHelper.getLogger();
private static FileInputStream inputStream;
 
public static void main(String[] args) {
 
FTPClient client = null;
 
// 계정 로그인
try {
client = new FTPClient();
 
// 한글파일명 처리를 위해 인코딩을 euc-kr로 한다.
client.setControlEncoding("euc-kr");
 
// Test 서버 정보
LOGGER.info(FTP Client Test Program");
LOGGER.info("Start~~~~~~");
 
// TEST서버에 접속, test서버 도메일 혹은 ip 주소입력.
client.connect("test.com");
LOGGER.info("Connected to test.com...........");
 
// 응답코드가 비정상일 경우 종료함
int reply = client.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
client.disconnect();
LOGGER.info("FTP server refused connection");
 
} else {
LOGGER.info(client.getReplyString());
 
// timeout을 설정
client.setSoTimeout(10000);

// 로그인
client.login("test", "1234");
LOGGER.info("test account login success...");

// 업로드 파일 타입 셋팅, 바이너리 혹은 ascii
client.setFileType(FTP.BINARY_FILE_TYPE);        
// 각종 정보를 처리 (Put / Get / Append등)
 
client.logout();

} catch (Exception e) {
LOGGER.info("해당 ftp 로그인 실패하였습니다.");
e.printStackTrace();
System.exit(-1);
} finally {
if(client != null && client.isConnected()){
try {
client.disconnect();
}catch(IOException ioe) {
ioe.printStackTrace();
}
}
}
}
}
---------------------------

정보처리 중, 
1. 파일 업로드. storeFile / appendFile
storeFile은 파일을 해당 위치에 저장하는 것이고,
appendFile은 기존파일이 있다면 append 해주고 없으면 새로 저장해 주는 기능..
---------------------------
File file = new File("c:\\temp\\test.jpg");
inputStream = new FileInputStream(file);
boolean result1 = client.appendFile("/TEMP/test.jpg", inputStream);
boolean result2 = client.storeFile("/TEMP/test.jpg", inputStream);
inputStream.close();
---------------------------

2. 파일 다운로드. retrieveFile
---------------------------
File get_file = new File("c:\\temp\\test1.jpg");
FileOutputStream outputstream = new FileOutputStream(get_file);
boolean result = client.retrieveFile("/TEMP/test.jpg", outputstream);
outputstream.close();
---------------------------

3. 기타. 
//파일 이름변경 (rename)
boolean result4 = client.rename("/public/바꾸기전.jpg", "/public/바꾼후.jpg");
//파일 삭제 (delete)
boolean result5 = client.deleteFile("/public/삭제할.jpg");
//Dircetory 생성
boolean result6 = client.makeDirectory("/public/test");
//OS 커맨드 입력하기
client.sendCommand(FTPCommand.MAKE_DIRECTORY,"/public/test");



자연스레,
또하나를 배워간다....

덧글

댓글 입력 영역