관리 메뉴

엉망진창

자바<JAVA> 아파치(APACHE) 오픈소스 COMMONS NET 이용하여 FTP파일업로드 하기 본문

Study_Web/JSP

자바<JAVA> 아파치(APACHE) 오픈소스 COMMONS NET 이용하여 FTP파일업로드 하기

엉망진창 2010. 7. 16. 17:46



http://blog.naver.com/lover4908/110072552163

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;


public class Util {
 
 public static final void simpleSendFileToFTP(String targetUrl, String id,
   String pwd, String port, String realSaveLocation, File file)
   throws Exception {

  FTPClient client = null;
  BufferedInputStream bis = null;
  try {
   client = new FTPClient();
   /*
    * FTPClientConfig config = new FTPClientConfig();
    * config.setServerLanguageCode("ko");
    * config.setDefaultDateFormatStr("MM월 d일 HH:mm");
    * config.setRecentDateFormatStr("MM웡 d일 HH:mm");
    * client.configure(config);
    */
   client.setControlEncoding("euc-kr");
   client.connect(targetUrl, Integer.parseInt(port));
   int resultCode = client.getReplyCode();

   if (FTPReply.isPositiveCompletion(resultCode) == false) {
    throw new Exception("FTP 서버에 연결할 수 없습니다.");
   } else {
    client.setSoTimeout(5000);
    boolean isLogin = client.login(id, pwd);
    if (isLogin == false) {
     throw new Exception("FTP 서버에 로그인 할 수 없습니다.");
    }
    client.setFileType(FTP.BINARY_FILE_TYPE);

    String[] locArr = realSaveLocation.split("/");
    String savaLoc = "";

    for (int i = 0; i < locArr.length; i++) {
     savaLoc = savaLoc + locArr[i] + "/";
     client.makeDirectory(savaLoc);
    }

    bis = new BufferedInputStream(new FileInputStream(file));
    boolean isSuc = client.storeFile(savaLoc + file.getName(), bis);
    // System.out.println("파일 전송 성공여부 : "+isSuc);
    if (isSuc == false) {
     throw new Exception("파일 업로드에 실패 하였습니다.");
    }
    /*
     * FTPFile[] list = client.listFiles(); for(int i=0 ;
     * i<list.length ; i++) { try{
     * System.out.println(list[i].toString()); }catch (Exception e)
     * { } }
     */
    client.logout();
   }
  } catch (Exception e) {
   e.printStackTrace();
   throw e;
  } finally {

   if (bis != null) {
    try {
     bis.close();
    } catch (Exception e) {
    }
   }
   if (client != null && client.isConnected()) {
    try {
     client.disconnect();
    } catch (Exception e) {
    }
   }
  }

 }
 

}

 

 

simpleSendFileToFTP(String targetUrl , String id , String pwd , String port , String realSaveLocation , File file) 메소드 원형이 다음과 같습니다.

targetUrl  <-- FTP 주소

id  <-- 사용자 아이디

pwd <-- 사용자 패스워드

port  <-- FTP 포트입니다. 일반적으로 21을 사용할겁니다??

realSaveLocation  <-- FTP 서버에 저장되어야 할 경로입니다.

file <-- 업로드할 로컬파일의 경로입니다. 파일객체조

 

사용하실때는 예를 들어서

Util.simpleSendFileToFTP("127.0.0.1" , "User" , "Password" , "21" , "/doc/data/2009/10" , new File("c:/data/01/test.xls"))

이런식으로 사용하시면 됩니다.

 

혹시 실제 FTP의 저장될 경로의 폴더가 모두 존재하지 않을경우에 자동으로 생성하게 했습니다.

API중에 makeDirectory() 이녀석이 폴더를 생성하게 해주는데요. 상위폴더가 없으면 생성을 못하더군요. 그래서 문자열 / 을 구분자로 짤라서 상위부터 하나씩 생성하게 했습니다.

 

어렵고 복잡한게 싫어서 최대한 간단하게 개발하려고 해서 이런저런 설정하는 부분들은 다 빼버리고 했는데 , 저의 경우는 잘 동작하는군요.

 

혹시 FTP에 접속해서 파일 리스트를 받으려고 하시는 분중에 접속 및 로그인 다되는데 파일리스트만 가져오지를 못하는 경우가 있습니다.

이는 파일리스트 가져온 결과값에 한글이 포함되어 있으면  , 아파치 NET이 이 한글을 파싱하는 과정에서 오류가 발생해서 리스트를 가져오지 못합니다. 이 부분을 해결할려면 제가 주석으로 막아놓은 부분을 적용해보시기 바립니다.
 /*
   FTPClientConfig config = new FTPClientConfig(); 
   config.setServerLanguageCode("ko");
   config.setDefaultDateFormatStr("MM월 d일 HH:mm");
   config.setRecentDateFormatStr("MM웡 d일 HH:mm");
   client.configure(config);
   */
이 부분입니다.

 /*
    FTPFile[] list =  client.listFiles();
    for(int i=0 ; i<list.length ; i++) {
     try{
     System.out.println(list[i].toString());
     }catch (Exception e) {
     }
    }
    */
이 부분은 리스트 테스트 하는 부분이구요.

 

사실 위에 부분은 파일 업로드하는 것하고 밀접한 관계는 없으나 , 저처럼 접속잘되고 로그인 잘되고 업로드 다운로드 다 잘되는데 , 리스트를 가져오기 못하는 굉장히 당혹스러움을 경험해 무한삽질에 빠지는데 도움이 될까하여 남겼습니다.

 

파일 다운로드 처럼 , 위에것을 사용하려면 jar 파일 2개가 필요합니다. 업로드 할테니 다운받으세요.

최신것을 받으시려면 아파치 사이트 들어가서 받으셔요.

http://commons.apache.org/

여기로 들어가시면 됩니다.

 

저포함 모든 생계형 개발자님들... 칼퇴해서... 여가생활 즐깁시다 --;;
[출처] 자바<JAVA> 아파치(APACHE) 오픈소스 COMMONS NET 이용하여 FTP파일업로드 하기|작성자 달빛