728x90

자바로 FTP 파일 전송(File Upload)

FTP tool(파일질라 등)로 우리들은 많은 파일들을 업로드를 해보았을 것 입니다.

하지만 저는 FTP를 통해 업로드를 많이 했지만 실제로 자바로 구현해본적은 많지 않았기에 공부를 위해 한 번 해보기로 결심했습니다.

 

저는 NAS장비가 있어 연결했고, 다른분들은 다른 것으로 연결하셔도 됩니다.

 

Commons Net API

Apache 에서 제공하는 API로 다양한 프로토콜에 대한 지원을 할 수 있는 구조를 갖고 있습니다.

 

FTP 업로드 코드에서 핵심이 되는 클래스는 org.apache.commons.net.ftp.FTPClient 입니다.

FTP 프로토콜 처리를 서버 연결, 로그인, 파일 목록, 송수신 등의 기능을 제공합니다.

 

아래부터는 파일 업로드 예제로 코딩을 시작하도록 하겠습니다.

 

 

코딩 시작

1. POM.XML 추가

2. FTP import

 

3. FTPclient를 생성

 

* ftp Client common-net api로 생성

 

4. 호스트 연결 & 응답코드 체크

 

  * ftp.connect로 연결 후 응답코드 체크

5. 서버 응답코드 정상인지 확인

 

  * FTPReply.isPositiveCompletion을 통해 응답코드로 정상인지 확인

  * 정상이 아니면 disConnect

 

 

 6. showServerReply 함수 생성

server응답 확인 하는 함수

7. 로그인 후 폴더 생성 및 작업디렉터리 변경

 

  * 폴더 생성을 위해서 date로 현재 날짜와 시간을 날짜를 받음.

  * ftp.login(유저아이디, 비번) 으로 로그인

  * showServerReply 함수로 서버 응답 로그 확인

  * ftp.changeWorkingDirectory로 작업디렉터리로 변경

7. 파일 저장

 

  * Active Mode -> PassvieMode로 변경

             FTP의 active Mode, Passive Mode
  
                  Active Mode : Server가 client의 해당 포트 접속해 데이터를 보내줌.
                  Passive Mode : Server에서 클라이언트에 port 전달 , 그 Port로 server는 보내줌.

                                      방화벽, 네트워크 구조 신경쓸 필요 없음. 

    이러한 이유로 방화벽 및 네트워크 구조에 신경 안쓰기 위해 Passive Mode로 변경

    

  * FTP.setFileType FTP.BINARY_FILE_TYPE으로 변경

  * storeFile 함수로 파일 저장

  * 업로드 성공 로그 남기기

 

전체코드

결론

apache 에서 제공하는 commons-net FTPClient 클래스를 통해 FTP를 구현해봤습니다.

commons-net API는 FTP 이외에도 SMTP, Telnet 등 다양한 프로토콜을 처리를 할 수 있다고 합니다.

이 API를 사용해서 다양한 기능 등을 빠르게 개발할 수 있을 것 입니다.

반응형

+ Recent posts