원격지 ftp서버에 접속하여 파일을 업로드하는 예제입니다.
관련 API
http://commons.apache.org/net/apidocs/org/apache/commons/net/ftp/
패키지 다운(압축해제 후 commons-net-x.x.x.jar 파일 import)
http://commons.apache.org/net/download_net.cgi
1. 원격지 ftp서버의 폴더상태
2. ftp서버에 업로드할 로컬폴더 상태
3. main method 실행후
4. 업로드 후 ftp서버의 폴더상태
- 익스플로러 접속시 한글명이 깨져보이나 탐색기로 확인하면 정상적으로 보입니다.
//======================== FTPUpLoader.java ==================================
package com.appspot.hihanjoong.util.ftp;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
/**
* ftp서버 접속하여 파일을 업로드/다운로드 함
* @author 조한중(hanjoongcho@gmail.com)
*
*/
public class FTPUpLoader {
/**
*
* @param ip ftp서버ip
* @param port ftp서버port
* @param id 사용자id
* @param password 사용자password
* @param folder ftp서버에생성할폴더
* @param files 업로드list
* @return
*/
public boolean sendFtpServer(String ip, int port, String id, String password,
String folder,String localPath, ArrayList<String> files) {
boolean isSuccess = false;
FTPClient ftp = null;
int reply;
try {
ftp = new FTPClient();
ftp.connect(ip, port);
System.out.println("Connected to " + ip + " on "+ftp.getRemotePort());
// After connection attempt, you should check the reply code to verify
// success.
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
System.err.println("FTP server refused connection.");
System.exit(1);
}
if(!ftp.login(id, password)) {
ftp.logout();
throw new Exception("ftp 서버에 로그인하지 못했습니다.");
}
ftp.setFileType(FTP.BINARY_FILE_TYPE);
ftp.enterLocalPassiveMode();
System.out.println(ftp.printWorkingDirectory());
try{
ftp.makeDirectory(folder);
}catch(Exception e){
e.printStackTrace();
}
ftp.changeWorkingDirectory(folder);
System.out.println(ftp.printWorkingDirectory());
for(int i = 0; i < files.size(); i++) {
//ftp서버에 한글파일을 쓸때 한글깨짐 방지
String tempFileName = new String(files.get(i).getBytes("utf-8"),"iso_8859_1");
String sourceFile = localPath + files.get(i);
File uploadFile = new File(sourceFile);
FileInputStream fis = null;
try {
fis = new FileInputStream(uploadFile);
System.out.println(sourceFile + " : 전송시작 = >");
//tempFileName 업로드 될 타겟의 풀 경로가 들어가야 함. ex) /A/A01/A001/aa.zip 파일명만 들어갈경우 unix에서 전송 실패하는 경우가 생김.
isSuccess = ftp.storeFile(tempFileName, fis);
System.out.println(sourceFile + " : 전송결과 = >" + isSuccess);
} catch(IOException e) {
e.printStackTrace();
isSuccess = false;
} finally {
if (fis != null) {
try {fis.close(); } catch(IOException e) {}
}
}//end try
}//end for
ftp.logout();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (ftp != null && ftp.isConnected()) {
try { ftp.disconnect(); } catch (IOException e) {}
}
}
return isSuccess;
}
}
//======================== FTPUpLoaderMain.java ==================================
package com.appspot.hihanjoong.util.ftp;
import java.util.ArrayList;
public class FTPUpLoaderMain {
public static void main(String[] args) {
FTPUpLoader upLoader = new FTPUpLoader();
ArrayList<String> list = new ArrayList<String>();
list.add("한글이미지.PNG");
list.add("토렌져.exe");
list.add("Livepot.Searcher.install.exe");
list.add("utorrent.exe");
boolean re = upLoader.sendFtpServer("192.168.2.7", 21, "guest",
"guest", "test2","C:\\test\\", list);
if(re){
System.out.println("FTPUpLoaderMain.java :: 업로드 성공");
}else{
System.out.println("FTPUpLoaderMain.java :: 업로드 실패");
}
}
}
FTP UpLoad 수정 버전
FTPUpLoader.Java
[출처] java ftp 서버 파일 업로드하기 |작성자 Hanjoong
'Java' 카테고리의 다른 글
[Java] 웹페이지 applet 실행 (0) | 2014.05.13 |
---|---|
[Java] Rapidant Applet 웹 대용량 파일 전송 (0) | 2014.05.09 |
[Java] shape file header 정보 읽기 (0) | 2014.01.17 |
[Java] String.format (0) | 2013.12.31 |
[Java] 다른 서버의 action 호출 (0) | 2013.11.08 |