💬
목차
< 뒤로가기
인쇄

캐모마일 FTP 모듈 가이드

개요

FTP 유틸은 FtpUtil과 SftpUtil 클래스로 제공된다.

FtpUtil은 org.apache.commons.net.ftp.FTPClient 클래스를Wrapping하여 업로드, 다운로드, 리스트 조회 등의 기능을 수행한다.

SftpUtil은 com.jcraft.jsch.ChannelSftp 클래스를 Wrapping하여 마찬가지로 업로드, 다운로드, 리스트 조회 등의 기능을 수행한다.

FTP는 Encryption, Firewalls, Vulnerabilities 등의 이유로 SFTP 를 이용하는 것이 바람직하다.

관련 클래스

  • MenuService: DB에서 권한 정보와 메뉴 정보를 읽어와 적절한 계층 구조 리스트를 반환하는 관련 기능을 제공하는 클래스이다.
  • QueryProperty: 쿼리에서 사용될 프로퍼티 설정 정보를 담는 클래스이다.

dependency

<dependency>
  <groupId>net.lotte.chamomile.module</groupId>
  <artifactId>chamomile-ftp</artifactId>
  <version>3.0.0-SNAPSHOT</version>
</dependency>

사용법

[설정]

FTP 관련 정보를 application.properties(또는 application.yml)파일에 입력하면 해당 정보를 기반으로 bean이 자동으로 생성된다.

(※ 정보를 입력하지 않을 경우 default 값으로 생성)

# application.yml 예시
  chmm:
    ftp:
      address: test
      port: 21
      id: test
      password:
// 설정 관련 소스
@ConfigurationProperties("chmm.ftp")
@Getter
public class ChamomileFtpProperties {
    private String address;
    private Integer port;
    private String id;
    private String password;

    // ===== sftp 관련 설정 ====
    private String secureAddress;
    private Integer securePort;
    private String secureId;
    private String securePassword;
    private String hostKey;

    ..
    }

직접 bean을 생성하고 싶다면 다음과 같이 생성하면 된다.


private final ChamomileFtpProperties ftpProperties;

@Value("${chmm.ftp.secureMode:false}")
private boolean secureMode;

@Bean
@ConditionalOnMissingBean
public FtpCommonAuth ftpCommonAuth() {
        return new FtpCommonAuth(ftpProperties.getAddress(), ftpProperties.getPort(), ftpProperties.getId(), ftpProperties.getPassword());
        }

@Bean
@ConditionalOnMissingBean
public FtpCommonAuth sftpCommonAuth() {
    return new FtpCommonAuth(ftpProperties.getSecureAddress(), ftpProperties.getSecurePort()
        , ftpProperties.getSecureId(), ftpProperties.getSecurePassword());
}

@Bean
@ConditionalOnMissingBean
public FtpUtil ftpUtil() {
    return new FtpUtil(ftpCommonAuth(), secureMode);
}

@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(prefix = "chmm.ftp", name = "hostKey")
public SftpUtil sftpUtil() throws JSchException {
    return new SftpUtil(sftpCommonAuth(), ftpProperties.getHostKey());
}

기능

  • 연결

    ftpUtil.connect();
    ftpUtil.login();
    ftpUtil.setEncoding("UTF-8");
  • Check Working Directory – 현재 working directory를 다음과 같이 가져올 수 있다.

    ftpUtil.changePath(“/someDirectory”);
    Final String workingDirectoryPath = ftpUtil.getWorkingDirectory();
  • List of Files

    
    // 모든 파일 가져오기
    FTPFile[] files = ftpUtil.listOfFiles();

// txt 확장자 파일만 가져오기
LsEntry[] files = ftpUtil.listOfFiles("^\S+.(?i)(txt)$");


- List of Directories - 현재 경로(Working Directory 또는 pwd)에서 디렉토리 리스트 조회한다.
```java
// regex 패턴에 일치하는 디렉토리 목록 조회
FTPFile[] dirs = ftpUtil.listOfDirs("정규식");

// 디렉토리 목록 조회
FTPFile[] dirs = ftpUtil.listOfDirs();
  • File Upload – 업로드될 디렉토리경로와 업로드할 파일경로를 입력한다.

    final String uploadDirPath = “…”; (FTP 서버내부의 디렉토리 경로)
    final String uploadFilePath = “…”; (웹서버내부의 파일 경로)
    ftpUtil.uploadFile(uploadDirPath, uploadFilePath);
  • File & Directory 삭제

    삭제할 파일의 경로를 입력

    ftpUtil.deleteFile(“/someDirectory/someFile.txt”)

    삭제할 디렉토리의 경로를 입력한다. 해당 디렉토리의 내부가 비어있지 않으면 삭제할 수 없다.

    ftpUtil.deleteDir(“/someDirectory”)
  • make Directory – 디렉토리 생성

    ftpUtil.makeDirectory(“/someDirectory”)
  • File 다운로드
    다운로드 받을 파일 경로와 로컬상에 저장할 위치 입력

    // FTP서버의 someFilePath에 해당하는 파일을 로컬 C:\Directory 경로로 다운로드한다.
    ftpUtil.downloadFile(“someFilePath”, “C:\Directory”);

[예제]

디렉토리 리스트 조회

@RestController
@RequiredArgsConstructor
@Slf4j
public class TestFtpController {

    private final FtpUtil ftpUtil;

    @GetMapping("ftp")
    public FTPFile[] ftpTest() throws IOException {
        // 연결
        ftpUtil.connect();
        ftpUtil.login();
        ftpUtil.setEncoding("UTF-8");

        ftpUtil.changePath("/");
        FTPFile[] dirs = ftpUtil.listOfDirs();

        ftpUtil.logout();
        ftpUtil.disconnect();

        return dirs;
    }
}
이전 이메일
다음 파일