며칠 전, 나는 프로젝트를했다. 클라이언트와 관리자는 함께 작성되었으며 동일한 서버를 공유했습니다. 클라이언트가 업로드 한 파일은 모두 서버의 하드 디스크에있었습니다. Lao Long은 클라이언트와 관리자 측을 분리 할 것을 제안했으며 현재 사용자가 업로드 한 첨부 파일의 저장에 문제가있었습니다. 분명히, 수백 개의 m만큼 큰 APK 파일을 데이터베이스에 저장하는 것은 비현실적입니다. 오랫동안 확인한 후 FTP 서버를 설정하여 양쪽 끝에 파일을 전송하는 가장 빠른 방법입니다.
특정 프로세스는 사용자가 외부 네트워크 클라이언트에 로그인하여 파일을 외부 네트워크 서버 하드 디스크에 업로드한다는 것입니다. 동시에, 파일은 외부 네트워크 서버를 통해 인트라넷 관리자 서버의 FTP 서버에 액세스하고이를 인트라넷 서버 하드 디스크로 전달합니다. 이러한 방식으로 인트라넷 서버는 업로드 된 파일을 암호화하고 서명 한 다음 파일을 FTP를 통해 외부 네트워크 서버 하드 디스크로 다시 전달하여 사용자가 다른 작업을 수행 할 수 있습니다.
특정 구현에 사용 된 도구 : Serv-U. Serv-U는 Windows에서 FTP 서버를 설정할 수있는 도구입니다. 다운로드 및 크래킹 후 단계를 따르고 FTP 액세스, 작동 권한 등을 허용하는 IP, 포트, 계정 암호, 디스크 경로를 설정하면 사용할 수 있습니다. IP를 테스트 할 때는 127.0.0.1을 선택하고 인트라넷에서 IP를 테스트 할 때는 192.168.0.x를 선택하십시오.
Java 프로젝트의 구현에서 나는 도구 클래스 직접 작성하고 Commons-Net 패키지의 Apache 패키지를 사용하여 기능을 업로드, 다운로드 및 삭제했습니다. 첨부 된 코드 :
패키지 app.ftp; import java.io.file; import java.io.fileInputStream; import java.io.filenotfoundException; import java.io.fileoutputStream; import java.io.ioexception; import java.io.inputstream; import java.io.outputStream; import org.apache.commons.net.ftp.ftpclient; import org.apache.commons.net.ftp.ftpfile; import org.apache.commons.net.ftp.ftpreply; /*** ftp 서버 도구 클래스* /public class ftputils { /*** 파일을 ftp 서버에 업로드* @param url* 서버 IP 주소* @param port* @param username* 사용자 로그인 이름* @param 비밀번호* @param store* 서버 파일 스토리지 경로* @param filename* 서버 파일 스토리지 이름* @param* @param* @param in <b> true </b> : 성공적으로 업로드* <br/>* <b> false </b> : 업로드 실패*/public static boolean storefile (문자열 URL, int 포트, 문자열 사용자 이름, 문자열 비밀번호, 문자열 파일 이름, 입력 스트림 IS) {부울 결과 = 거짓; ftpclient ftp = 새로운 ftpclient (); 시도 {// 서버에 연결할 때 포트 기본값은 21로 ftp.connect (url, port)를 직접 연결할 수 있습니다. // 서버 ftp.login (사용자 이름, 비밀번호)에 로그인; // 반환 코드가 합법적인지 (! ftpreply.ispositiveCode (ftp.getReplyCode ())) {// 불법 ftp.disconnect (); // 프로그램 리턴 결과를 종료합니다. } // FTP 디렉토리가 존재하는지 여부를 결정합니다. 존재하지 않는 경우 다중 레벨 디렉토리 문자열 생성 S = "/"+StorePath를 포함하는 디렉토리를 작성하십시오. 문자열 [] dirs = s.split ( "/"); ftp.changeworkingdirectory ( "/"); // 디렉토리가 순서대로 존재하는지 확인하십시오. 존재하지 않는 경우 (int i = 1; dirs! = null && i <dirs.length; i ++) {if (! ftp.changeworkingdirectory (dirs [i])) {if (ftp.makedirectory (dirs [i])) {if (! ftp.changeworkingdirectory [i]); }} else {return false; }}} // 파일 작업 디렉토리 설정 FTP.CHANGEWORKINGDIRECTORY (StorePath); // 파일 유형 설정, 바이너리 ftp.setFileType (ftpclient.binary_file_type); // 버퍼 크기 설정 ftp.setBuffersize (3072); // 파일 업로드 결과 = ftp.storeFile (filename, is); // 입력 스트림을 닫습니다 .Close (); // 서버 ftp.logout () 로그 아웃; } catch (ioexception e) {e.printstacktrace (); } 마침내 {try {// if (null! = is) {// 입력 스트림을 닫습니다 .Close (); } // (ftp.isconnected ()) {// ftp.disconnect (); }} catch (ioexception e) {e.printstacktrace (); }} 반환 결과; }/** * FTP 서버에서 로컬로 파일 다운로드 * * @param url * 서버 IP 주소 * @param port * 서버 포트 * @param username * @param password * 사용자 로그인 비밀번호 * @param remotepath * 서버 파일 스토리지 경로 * @param filename * @param localpath * @param localpath * @rethon * <b> <b> <b> <b> <b> b. <b> false </ b> : 다운로드 실패*/ public static boolean retievefile (문자열 URL, int 포트, 문자열 사용자 이름, 문자열 암호, 문자열 remotepath, 문자열 파일 이름, 문자열 로컬 경로) {boolean result = false; ftpreply.ispositivecompletion (ftp.getReplyCode ())) {// 포트가 합법적이지 않은 경우 연결 해제; // 프로그램 리턴 결과를 종료합니다. } // 파일을 설정하는 디렉토리 ftp.changeworkingDirectory (remotepath); // 파일 유형, Binary ftp.setFileType를 설정합니다 (ftpclient.binary_file_type); // 버퍼 크기를 설정하여 ftp.setBuffersize (3072); // ftp.setcontrolencoding ( "utf-8")을 인코딩하는 문자를 설정합니다. // 로컬 파일 객체 파일을 작성하십시오. localFile = 새 파일 (localPath + "/" + filename); // 파일에서 모든 파일 이름을 가져옵니다. directory string [] remotenames = ftp.listnames (); // 파일 이름을 반복하여 (string remoteName : remotenames) {if (filename.equals (remotename)) {result = true; }} // 파일 이름 비교가 성공하면 다운로드 프로세스를 입력하면 (결과) {// 파일 출력 스트림 구성 OS = 새 FileOutputStream (localFile); // 파일 다운로드 result = ftp.RETRIEVEFILE (Filename, OS); // 출력 스트림 os.close ()를 닫습니다. } // 서버 ftp.logout () 로그 아웃; } catch (ioexception e) {e.printstacktrace (); } 마지막으로 {try {// 출력 스트림이 (null! = os)가 존재하는지 결정합니다. {// 출력 스트림 os.close (); } // 연결이 존재하는지 확인하십시오 (ftp.isconnected ()) {// ftp.disconnect (); }} catch (ioexception e) {e.printstacktrace (); }} 반환 결과; }/*** ftp 서버에서 파일 삭제** @param url* 서버 IP 주소* @param port* @param username* 사용자 로그인 이름* @param 비밀번호* 사용자 로그인* @param remotepath* 서버 파일 스토리지 경로* @param filename* @return* <b> true </b> : 삭제* <br//b> : 삭제되었습니다. public static boolean deletefile (문자열 URL, int 포트, 문자열 사용자 이름, 문자열 암호, 문자열 remotepath, String filename) {boolean result = false; ftpclient ftp = 새로운 ftpclient (); 시도 {// 서버에 연결할 때 포트 기본값은 21로 ftp.connect (url, port)를 직접 연결할 수 있습니다. // 서버 ftp.login (사용자 이름, 비밀번호)에 로그인; // 반환 코드가 합법적인지 (! ftpReply.ispositiveCode (ftp.getReplyCode ())) {// 합법적이지 않은 경우 연결 해제 ftp.disconnect (); // 프로그램 리턴 결과를 종료합니다. } // 파일을 설정하는 디렉토리 ftp.changeworkingDirectory (remotepath); // 파일 유형, Binary ftp.setFileType를 설정합니다 (ftpclient.binary_file_type); // 버퍼 크기를 설정하여 ftp.setBuffersize (3072); // ftp.setcontrolencoding ( "utf-8")을 인코딩하는 문자를 설정합니다. // 파일에서 모든 파일 이름을 가져옵니다. directory string [] remotenames = ftp.listnames (); // 파일 이름을 비교하여 다운로드 할 파일 이름이 현재 (String RemoteName : Remotenames)에 포함되어 있는지 확인하기 위해 루프를 비교합니다. }} // 파일 이름 비교가 성공하면 (result) {// 삭제 결과 = ftp.deletefile (filename); } // 서버에서 로그 아웃 ftp.logout (); } catch (ioexception e) {e.printstacktrace (); } 마침내 {try {// 연결이 존재하는지 확인하십시오 (ftp.isconnected ()) {// ftp.disconnect (); }} catch (ioexception e) {e.printstacktrace (); }} 반환 결과; } public static void main (String [] args)은 filenotfoundException {// try {// fileInputStream fis = new FileInputStream ( "d :/soft stac // system.out.println (StoreFile ( "192.168.1.2", 21, "admin", "1", "c :/documents and settings/administrator/desktop", randomuuid.random () + ".zip", fis); //} catch (filenotfoundException e) {// e.printstacktrace (); //} // 파일 파일 = 새 파일 ( "c : /users/freed/desktop/1.txt"); // inputStream은 = new FileInputStream (file); //system.out.println("127.0.0.1 ", 21,"feili ","feili ","examples ","2.txt ", is)); //system.out.println("127.0.0.1 ", 21,"feili ","feili ","example/jsp ","index.html ","c :/user/freed/gooktop "); //system.out.println(deletefile("127.0.0.1 ", 21,"feili ","feili ","testpath ","1.txt ")); }}파일을 업로드 할 때 먼저 파일 파일을 fileInputStream에 넣어야합니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.