머리말
최근 프로젝트에서 FTP 서버와 상호 작용해야합니다. 인터넷에서 FTP 업로드 및 다운로드에 대한 도구 클래스를 찾았습니다. 대략 두 가지 유형이 있습니다.
첫 번째는 싱글 톤 패턴 클래스입니다.
두 번째 유형은 서비스를 통해 FTP의 업로드 및 다운로드를 직접 구현하는 다른 서비스를 정의하는 것입니다.
이 두 가지 감정에는 장단점이 있습니다.
첫 번째는 코드 재사용을 구현하지만 구성 정보는 클래스에 작성되어야하며 유지하기가 더 복잡합니다.
두 번째 유형은 스프링 프레임 워크이며, 구성 정보는 속성 파일을 통해 동적으로 주입 될 수 있지만 코드를 재사용 할 수는 없습니다.
그래서 위의 두 가지 장점을 통합하기 위해 도구 클래스를 직접 구현할 계획입니다. 그건 그렇고, 업로드 프로세스 중 일부 일반적인 문제도 해결되었습니다.
Spring Framework를 사용하고 있기 때문에 도구 클래스가 Spring Management의 Bean으로 선언되면 기본적으로 싱글 톤이므로 싱글 톤을 다시 구현할 필요가 없습니다. 그리고 콩이기 때문에 특성 파일의 특성을 콩의 특성에 분리하기 위해 주입 할 수 있습니다. 다음은 특정 코드입니다.
package com.cky.util; import java.io.file; import java.io.fileoutputStream; import java.io.ioexception; import java.io.inputStream; import java.io.outputstream; import org.apache.commons.net.ftp.ftp; import org.apache.commons.net.tp.ftp.tp.tp.tp.tp.tp.tp.tp.tp.tp.tp.tp.tp.tp.tp.tp.tp.ptp.tp.net.net.ptp org.apache.commons.net.ftp.ftpfile; import org.apache.commons.net.ftp.ftpreply; import org.springframework.beans.beans.annotation.value; import org.spramepramework.stereotyp.component; // unflicatical wortical urtet {//@componentpublic upportical worget {// @Value ( "$ {ftp.host}") 개인 문자열 호스트; // ftp 서버 IP @Value ( "$ {ftp.port}") 개인 int 포트; // ftp server port @Value ( "$ {ftp.username}") private String username; // username @value ( "$ {ftp.password}") 개인 문자열 암호; // password @Value ( "$ {ftp.basepath}") 개인 문자열 기반부 (// 기본 경로, 초기 값을 설정하고,이 세상을 개방하고, 그리고,이 구성이 시작되었고, 코드 뒤의 주요 방법에서/*public ftputil () {//system.out.println (this.toString ()); 호스트 = "192.168.100.77"; 포트 = 21; username = "ftpuser"; 비밀번호 = "FTP54321"; Basepath = "/home/ftpuser/"; }*// **** @param Path 파일을 서버에 업로드하는 경로* @param filename 파일 업로드 파일 이름* @param 입력 입력 스트림* @return*/ public boolean fileUpload (문자열 path, 문자열 파일 이름, 입력 입력) {ftpclient ftp = new ftpclient (); try {ftp.connect (호스트, 포트); ftp.login (사용자 이름, 비밀번호); // 파일 인코딩 형식 FTP.SETCONTROLENCODING ( "UTF-8")을 설정합니다. // FTP 커뮤니케이션 모드가 있습니다. // 포트 (활성 모드) 클라이언트는 새 포트 (> 1024)를 엽니 다.이 포트를 통해 명령을 보내거나 데이터를 전송한다. 이 기간 동안 서버는 21 // PASV (Passive Mode) 클라이언트와 같이 열리는 하나의 포트 만 사용합니다. 클라이언트는 서버로 PASV 명령을 보내고 서버는 새 포트 (> 1024)를 열고이 포트를 사용 하여이 포트 21 //와 함께 데이터를 전송할 수없는 클라이언트, 방화벽 등에 따라 포트를 열어야합니다. // 전송 모드를 스트림 모드로 설정 FTP.SETFILETRANSFERMODE (ftp.stream_transfer_mode); // 연결이 성공했는지 여부를 결정하기 위해 상태 코드를 가져옵니다. } // 업로드 된 파일의 루트 디렉토리로 이동하면 (! ftp.changeworkingDirectory (BasePath)) {Throw New Runtimeexception ( "루트 디렉토리가 존재하지 않으며 작성해야한다"); } // 디렉토리가 존재하는지 (! ftp.changeworkingDirectory (path)) {string [] dirs = path.split ( "/"); // (string dir : dirs) {if (null == dir || "". Equals (dir))에 대한 디렉토리를 만듭니다. // 디렉토리가 존재하는지 여부를 판단합니다 (! ftp.changeworkingDirectory (dir)) {// if (! ftp.makedirectory (dir)) {throw new runtimeexception ( "하위 디렉토리 생성 실패"); } // 새로 생성 된 디렉토리를 입력합니다. ftp.changeworkingDirectory (DIR); }} // 업로드 된 파일 유형을 바이너리 유형 FTP.SetFileType (ftp.binary_file_type)로 설정합니다. // 파일을 업로드 if (! ftp.storefile (filename, input)) {return false; } input.close (); ftp.logout (); 진실을 반환하십시오. }} catch (예외 e) {throw new runtimeexception (e); } 마침내 {if (ftp.isconnected ()) {try {ftp.disconnect (); } catch (ioexception e) {throw new runtimeexception (e); }}} 거짓을 반환합니다. } /** * * @param filename filename, 참고! 여기의 파일 이름은 다음과 같은 파일 이름 Plus Path입니다. try {ftp.connect (호스트, 포트); ftp.login (사용자 이름, 비밀번호); // 파일 인코딩 형식 FTP.SETCONTROLENCODING ( "UTF-8")을 설정합니다. // FTP 통신 모드가 있습니다. // 포트 (활성 모드) 클라이언트는 새 포트 (> 1024)를 엽니 다.이 포트를 통해 명령을 보내거나 데이터를 전송한다. 이 기간 동안 서버는 21 // PASV (Passive Mode) 클라이언트와 같이 열리는 하나의 포트 만 사용합니다. 클라이언트는 PASV 명령을 서버로 보내고 서버는 새 포트 (> 1024)를 열고이 포트를 사용하여 클라이언트의 포트를 사용하여 포트를 열어야하므로 서버는 포트를 열어야합니다. ftp.enterlocalPassiveMode (); // 전송 모드를 스트림 모드로 설정 FTP.SETFILETRANSFERMODE (ftp.stream_transfer_mode); // 연결이 성공했는지 여부를 결정하기 위해 상태 코드를 가져옵니다. } int index = filename.lastIndexof ( "/"); // 파일의 경로를 가져옵니다. String path = filename.substring (0, index); // 파일 이름을 가져옵니다. String name = filename.substring (index+1); // 디렉토리가 존재하는지 여부를 판단합니다. } //이 디렉토리의 모든 파일을 가져옵니다. ftpfile [] files = ftp.listfiles (); for (ftpfile 파일 : files) {// 대상 파일이 있는지 판단 //system.out.println("file name "+file.getname ()+"--- "+name); if (file.getname (). equals (name)) {//system.out.println("file found "); // 찾은 경우 대상 파일을 로컬 파일로 복사하면 localFile = 새 파일 (localPath+"/"+file.getName ()); outputStream out = 새 FileOutputStream (localFile); ftp.retrievefile (file.getName (), Out); out.close (); }} ftp.logout (); 진실을 반환하십시오. } catch (예외 e) {throw new runtimeexception (e); } 마침내 {if (ftp.isconnected ()) {try {ftp.disconnect (); } catch (ioexception e) {throw new runtimeexception (e); }}}} // 두 기능 중 하나가 사용되면 다른 하나는 공개 정적 무효 기본 (String [] args) {// 업로드에 댓글을 달아야합니다. 시험-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- e.printstacktrace (); } 마침내 {}*/// 다운로드 시험------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------구체적인 사용
1 단계 : 스프링을로드 속성 파일로 구성합니다
ApplicationContext.xml
<Context : Property-Placeholder Location = "ClassPath :*. 속성"/> ftp.propertiesftp.host = 192.168.100.77ftp.port = 21ftp.username = ftpuserftp.password = ftp54321ftp.basepath =/home/ftpuser/
2 단계 : 도구 클래스를 콩으로 선언합니다
XML 메소드
<bean id = "ftputil"> <property name = "host"value = "$ {ftp.host}"> </property> <property name = "port"value = "$ {ftp.port}"> </property> <property name = "username"value = "$ {ftp.username} "> <속성 이름> <속성 이름" value = "$ {ftp.password}"> </property> <속성 이름 = "BasePath"value = "$ {ftp.basepath}"> </property> </bean>주석 방법, 구성 요소 스캔
<context : component-scan base-package = "com.cky.util"> </context : component-scan>
3 부 : 주입 및 사용
@autowired private ftputil ftputil;
요약
위의 것은 Spring FTP 업로드 및 다운로드 도구 문제에 대한 요약입니다. 모든 사람에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 모든 사람에게 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!