Java를 사용하여 FTP 서버에 파일 업로드

로컬 디스크에서 온라인 FTP 서버로 파일을 업로드하는 Java 코드를 작성하려면 Apache Commons Net API가 Java 개발자에게 매우 적합합니다. 간단하고 FTP로 쉽게 프로그래밍할 수 있습니다.

1- Apache Commons Net

API 다운로드 Apache Commons Net API 다운로드  여기에는 네트워크 도구 세트가 포함되어 있으며 FTP, 텔넷, SMTP 등과 같은 여러 프로토콜을 지원합니다. 업로드 후 .jar 파일은 프로젝트의 클래스 경로에 포함되어야 합니다.

2- FTP

클래스  FTPClient  FTP를 통해 로컬 파일을 온라인 서버로 전송하는 방법을 제공합니다.
  • boolean storeFile(문자열 원격, InputStream 로컬)
  • OutputStream storeFileStream (문자열 원격) < / span >< / li>
  • boolean storeUniqueFile(InputStream local)
  • boolean storeUniqueFile(문자열 원격, InputStream 로컬)
  • OutputStream storeUniqueFileStream()
  • OutputStream storeUniqueFileStream (문자열 원격) < / span >< / li>< / ul >이 방법의 차이점은 무엇입니까? 잘! 다음과 같이 분류할 수 있습니다.
    •  를 제공하여 파일을 저장합니다. InputStream  로컬 파일의(  InputStream  매개 변수로). 이러한 유형의 방법은 방법을 알 필요가 없을 때 채택됩니다. 그만큼  바이트  로컬 파일에서 서버로 전송됩니다. 우리는 시스템이 이것을 하도록 내버려 둡니다. processing.
    • 파일에 파일을 저장하고  OutputStream  연결의(OutputStream을 출력으로 갖는 메서드임). 이러한 유형의 메서드는 바이트가 사용되는 방식을 제어하려는 경우에 필요합니다.   전달, 읽기 위해 자체 코드를 작성하여 바이트  개체를 통해 원격 파일 경로에 저장될 로컬 파일을 통해  OutputStream입니다. 이것은 다음과 같은 경우에 유용할 수 있습니다. 진행 상황  업로드의 파일 크기 .
    동안 전송되는 바이트 수를 계산합니다.
    • 원격 파일 이름을 명확하게 지정합니다(remote라는 String 매개 변수를 허용하는 메서드).
    • 서버 이름과 원격 파일을 고유한 이름으로 둡니다(String 매개 변수가 없는 메서드).
    이러한 방법의 복잡성에도 불구하고 실제로 주로 사용되는 방법은 두 가지뿐입니다.
    • boolean storeFile(문자열 원격,InputStream 로컬)
    • OutputStream storeFileStream(String remote)
    이 여섯 가지 방법 외에도 파일을 다운로드하기 전과 후에 호출해야 하는 두 가지 다른 메서드가 있습니다.
    • boolean setFileType(int fileType): 파일의 유형을 결정합니다. FTP입니다. ASCII_FILE_TYPE 또는 FTP. BINARY_FILE_TYPE는 파일을 전송하는 데 사용됩니다. 기본 유형은 ASCII(일반 텍스트)이지만 모든 파일에서 작동하려면 바이너리로 만들어야 합니다. 파일 전송이 시작되기 전에 이 메서드를 호출해야 합니다.
    •   boolean completePendingCommand(): 다운로드가 완료된 후 트랜잭션을 완료하려면 이 메서드를 호출해야 합니다. 그녀가 돌아왔다   전송이 성공적으로 완료된 경우, 그렇지 않은 경우; false입니다. 업로드가 수행되었는지 확인하기 위해 이 메서드의 반환 값을 확인해야 합니다.
      기본적으로 FTP는 클라이언트에 대한 포트를 열어 연결을 설정하고 서버가 해당 포트에 연결할 수 있도록 합니다. 이것은 활성 모드이지만 방화벽에 의해 차단되어 파일 전송이 작동하지 않는 경우가 있습니다. 다행히 FTP 프로토콜에는 클라이언트가 연결할 수 있도록 서버에서 포트를 열어 연결이 설정되는 수동 모드인 또 다른 모드가 있습니다. 이 모드는 방화벽에 의해 차단되지 않습니다.

      따라서 FTPClient 클래스 메서드 enterLocalPassiveMode().

      3- Java로 파일을 전송하는 단계

      Apache Commons Net API를 사용하여 FTP 서버로 파일을 전송하는 코드를 올바르게 작성하려면 다음 단계를 따라야 합니다.
      • Connect 및 서버에 로그인합니다.
      • 연결에 수동 모드 사용.
      • 전송할 파일 유형 변경 바이너리로 전송할 파일 형식을 변경합니다.
      • InputStream 로컬 파일의 경우.
      • 메서드 중 하나를 호출합니다. 점포... ()을 눌러 파일 전송을 시작합니다. 두 가지 시나리오가 있습니다.
        • InputStream: 시스템이 송수신을 처리하도록 하는 가장 쉬운 방법입니다. 추가 코드는 없으며 항목을 전달하기만 하면 됩니다. InputStream  storeFile(문자열 원격, InputStream 로컬).
        • Using  OutputStream: 더 복잡하지만 전송되는 데이터를 더 잘 제어할 수 있습니다. 일반적으로 바이트를 읽으려면 몇 줄의 코드를 작성해야 합니다.  InputStream  로컬 파일의 바이트를 OutputStream 점포 방법... (), 예: storeFileStream(문자열 원격).
      • 데이터 스트림 닫기  입력 스트림  et  OutputStream.
      • 메서드를 호출합니다. completePendingCommand() 트랜잭션을 완료합니다.
      • Disconnect from server.
      메서드의 반환 값 점포... ()completePendingCommand()을 사용하여 업로드가 완료되었는지 확인합니다.

      4- Java

      이 코드는 다음 두 가지 방법을 사용하여 컴퓨터에서 FTP 서버로 파일을 보내는 방법을 보여줍니다.
      • boolean storeFile(문자열 원격, InputStream 로컬)
      • OutputStream storeFileStream (문자열 원격) < / span>< / li>< / ul> storeFile()인 경우 completePendingCommand()입니다. 전체 코드는 다음과 같습니다.

        import java.io.File; 
        import java.io.FileInputStream;
        import java.io.IOException;
        import java.io.InputStream을 사용합니다.
        import java.io.OutputStream;
        import org.apache.commons.net.ftp.FTP;
        import org.apache.commons.net.ftp.FTPClient;

        public class FTPUploadFile {

        public static void main(String[] args) {
        서버 문자열 = "ServerAddress";
        int 포트 = 21;
        문자열 user = "사용자 이름";
        문자열 비밀번호 = "yourPassword";

        FTPClient ftpClient = 새로운 FTPClient();
        {

        ftpClient.connect(서버, 포트);
        ftpClient.login(사용자, 비밀번호);
        ftpClient.enterLocalPassiveMode();

        ftpClient.setFileType(FTP. BINARY_FILE_TYPE);

        // 접근법 1: InputStream File file = new File("C:/plugins and styles.txt");

        문자열 경로 = "플러그인 및 styles.txt";
        InputStream inputStream = new FileInputStream(file);

        System.out.println("업로드 시작");
        //업로드 출력
        boolean res = ftpClient.storeFile(path, inputStream);
        //읽은 스트림을 닫습니다
        inputStream.close();

        if (res==true) {
        System.out.println("""+path+" 파일이 성공적으로 다운로드되었습니다.");
        }

        // 접근법 2: OutputStream file = new File("C:/track 1.wma");
        경로 = "오디오/트랙 1.wma";
        inputStream = new FileInputStream(파일);

        System.out.println("업로드 시작");
        OutputStream outputStream = ftpClient.storeFileStream(경로);
        byte[] bytesIn = 새 바이트[4096];
        int 버퍼 = 0;

        //파일의 끝에 도달하지 않은 한
        System.out.println("다운로드 중...");
        int 전송 = 0;
        int 퍼센트 = 0;
        //파일의 끝에 도달하지 않는 한
        while ((buffer = inputStream.read(bytesIn)) != -1) {
        //4096바이트의 버퍼로 데이터를 읽습니다
        outputStream.write(bytesIn, 0, buffer);
        전송됨 += 버퍼;
        퍼센트 = (int) (전송됨*100/file.length());
        System.out.println(백분율+"%");
        }
        //쓰기 읽기 스트림 닫기
        inputStream.close();
        outputStream.close();

        //결과 업로드
        res = ftpClient.completePendingCommand();
        if (res) {
        System.out.println(""+path+" 파일이 성공적으로 다운로드되었습니다.");
        }

        } catch (IOException e) {
        System.out.println(e.getMessage());
        e.printStackTrace();
        } 마지막으로 {
        try {
        if (ftpClient.isConnected()) {
        //FTP
        ftpClient.logout();
        ftpClient.disconnect()를 호출합니다.
        }
        } catch (IOException ex) {
        ex.printStackTrace();
        }
        }
        }
        }
        이 코드를 실행하면 전송이 성공했음을 반환합니다.

        Start of upload
        플러그인 및 styles.txt 파일이 성공적으로 다운로드되었습니다
        업로드 시작
        1%
        2%
        3%
        .
        .
        97%
        98%
        98%
        99%
        99%
        100%
        1.wma 트랙 파일이 성공적으로 다운로드되었습니다

    Advertisement

    AdBlock Detected

    Please disable your ad blocker and refresh the window to use this website.