EEALL@ONCE

☕FTP 서버에 파일을 업로드 본문

언어💻/자바☕

☕FTP 서버에 파일을 업로드

올엣원스 2023. 9. 11. 10:34
728x90
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class FTPUploader {
    public static boolean uploadFile(String server, int port, String username, String password, String remoteDirectory, String remoteFileName, String localFilePath) {
        FTPClient ftpClient = new FTPClient();
        InputStream inputStream = null;

        try {
            ftpClient.connect(server, port);
            ftpClient.login(username, password);
            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

            inputStream = new FileInputStream(localFilePath);

            // 원격 디렉토리로 이동 (없는 경우 생성됩니다)
            boolean directoryCreated = ftpClient.makeDirectory(remoteDirectory);
            if (directoryCreated) {
                System.out.println("원격 디렉토리 생성: " + remoteDirectory);
            }

            // 파일을 원격 서버에 업로드
            boolean uploaded = ftpClient.storeFile(remoteDirectory + remoteFileName, inputStream);

            if (uploaded) {
                System.out.println("파일 업로드 성공!");
            } else {
                System.out.println("파일 업로드 실패!");
            }

            return uploaded;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        } finally {
            try {
                if (inputStream != null) {
                    inputStream.close();
                }
                if (ftpClient.isConnected()) {
                    ftpClient.logout();
                    ftpClient.disconnect();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

 

위의 코드는 FTP 서버에 파일을 업로드하기 위한 Java 클래스인 `FTPUploader`를 구현한 것입니다. 각 메서드와 변수에 대한 설명은 다음과 같습니다:

1. `uploadFile` 메서드:
   - 이 메서드는 FTP 서버에 파일을 업로드하는 역할을 합니다.
   - 파라미터로 FTP 연결 및 업로드에 필요한 정보를 받습니다.
     - `server`: FTP 서버 주소 (예: "ftp.example.com")
     - `port`: FTP 포트 번호 (일반적으로 21)
     - `username`: FTP 계정 사용자 이름
     - `password`: FTP 계정 비밀번호
     - `remoteDirectory`: 원격 디렉토리 경로 (파일을 업로드할 위치)
     - `remoteFileName`: 업로드할 원격 파일 이름
     - `localFilePath`: 로컬 파일 경로 (업로드할 파일의 경로)
   - FTP 연결, 로그인, 파일 전송, 디렉토리 생성, 로그아웃, 연결 종료 등의 작업을 수행합니다.
   - 파일 업로드 성공 여부를 불리언 값으로 반환합니다.

2. `FTPClient`:
   - `FTPClient` 클래스는 Apache Commons Net 라이브러리에서 제공하는 FTP 클라이언트입니다. FTP 서버와의 통신을 관리하는 핵심 클래스입니다.
   - FTP 서버와의 연결, 파일 전송, 디렉토리 생성 등을 처리하는데 사용됩니다.

3. `InputStream`:
   - `InputStream`은 파일을 읽기 위한 바이트 스트림입니다. `FileInputStream`을 사용하여 로컬 파일을 읽어옵니다.

4. `try-catch-finally` 블록:
   - 코드에서 예외 처리를 위한 블록입니다.
   - FTP 연결, 파일 입출력 등에서 예외가 발생할 수 있으므로 이를 적절하게 처리합니다.

이 코드는 FTP 서버로 파일을 업로드하기 위한 편리한 클래스를 제공하며, 원격 서버의 디렉토리를 생성하고 파일을 업로드하는 과정을 자세히 다루고 있습니다. 위의 코드를 호출하면 FTP 업로드 작업을 쉽게 수행할 수 있습니다.


public class YourClass {
    private void convertToExcelClcFile(List<KtRcvClctAgncyRmnyDto> ktRcvClctPymCReport, List<KtRcvClctAgncyRmnyDto> ktRcvClctAgncyRmnyPymSDtos, HashMap infoDate, String filePath) throws FileNotFoundException {
        // Excel 파일 생성 코드 (이미 존재)

        try (Workbook workbook = new XSSFWorkbook();
             FileOutputStream fileOutputStream = new FileOutputStream(filePath)) {
            // Excel 파일 저장 코드 (이미 존재)

            // FTP 업로드 메소드 호출
            String server = "ftp.example.com"; // FTP 서버 주소
            int port = 21; // FTP 포트 (일반적으로 21)
            String username = "your_username"; // FTP 계정 사용자 이름
            String password = "your_password"; // FTP 계정 비밀번호
            String remoteDirectory = "/remote/directory/"; // 원격 디렉토리 경로
            String remoteFileName = "uploaded-file.xlsx"; // 업로드할 원격 파일 이름

            boolean uploaded = FTPUploader.uploadFile(server, port, username, password, remoteDirectory, remoteFileName, filePath);

            if (uploaded) {
                System.out.println("Excel 파일 업로드 성공!");
            } else {
                System.out.println("Excel 파일 업로드 실패!");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
728x90

'언어💻 > 자바☕' 카테고리의 다른 글

☕ 클래스 - static 이란?  (0) 2023.10.16
☕ 인스턴스란(객체)?  (0) 2023.10.16
☕Calendar calendar  (0) 2023.09.05
☕final  (0) 2023.09.01
☕`Path filePath`와 `File file = filePath.toFile()  (0) 2023.08.31