Beberapa hari yang lalu, saya melakukan proyek. Klien dan administrator ditulis bersama, dan mereka berbagi server yang sama. File yang diunggah oleh klien semuanya ada di hard disk server. Lao Long mengusulkan untuk memisahkan klien dan sisi administrator, dan pada saat ini ada masalah dengan penyimpanan lampiran yang diunggah oleh pengguna. Jelas, tidak realistis untuk menyimpan file APK yang sebesar ratusan M ke database. Setelah memeriksa waktu yang lama, ini adalah cara tercepat untuk membuat server FTP untuk mengirimkan file di kedua ujungnya.
Proses spesifiknya adalah bahwa pengguna masuk ke klien jaringan eksternal dan mengunggah file ke hard disk server jaringan eksternal. Pada saat yang sama, file mengakses server FTP dari server Administrator Intranet melalui server jaringan eksternal dan meneruskannya ke hard disk server intranet. Dengan cara ini, server intranet dapat mengenkripsi dan menandatangani file yang diunggah, dan kemudian meneruskan file kembali ke hard disk server jaringan eksternal melalui FTP untuk pengguna untuk melakukan operasi lain.
Alat yang digunakan dalam implementasi spesifik: serv-u. Serv-U adalah alat yang memfasilitasi kami untuk membuat server FTP di Windows. Setelah mengunduh dan retak, ikuti langkah -langkah, atur IP, port, kata sandi akun, jalur disk yang memungkinkan akses FTP, izin operasi, dll., Dan Anda dapat menggunakannya. Saat menguji IP, pilih 127.0.0.1, dan saat menguji IP di intranet, pilih 192.168.0.x.
Dalam implementasi proyek Java, saya menulis kelas alat sendiri dan menggunakan paket Commons-Net Apache, yang telah mengunggah, mengunduh, dan menghapus fungsi. Kode terlampir:
paket app.ftp; impor java.io.file; impor java.io.fileInputStream; impor java.io.filenotfoundException; impor java.io.fileoutputStream; impor java.io.ioException; impor java.io.inputstream; impor java.io.outputStream; impor org.apache.commons.net.ftp.ftpclient; impor org.apache.commons.net.ftp.ftpfile; impor org.apache.commons.net.ftp.ftpreply; /** * FTP server tool class* */ public class FTPUtils { /** * Upload file to FTP server* * @param url * Server IP address* @param port * Server port* @param userName * User login name* @param password * User login password* @param storePath * Server file storage path* @param fileName * Server file storage name* @param is * File input stream* @return * <b> true </b>: Unggah berhasil* <br/>* <b> false </b>: Unggah gagal*/public static boolean storefile (string url, int port, string nama pengguna, kata sandi string, string storePath, string fileName, inputstream is) {boolean result = false; FtpClient ftp = ftpclient baru (); coba {// Saat menghubungkan ke server, port default ke 21, Anda dapat langsung menghubungkan ftp.connect (url, port); // Masuk ke server ftp.login (nama pengguna, kata sandi); // Tentukan apakah kode pengembalian legal jika (! Ftpreply.ispositiveCompletion (ftp.getReplyCode ())) {// Putuskan sambungan saat ilegal ftp.disconnect (); // Akhiri hasil pengembalian program; } // Tentukan apakah ada direktori FTP. Jika tidak ada, buat direktori, termasuk membuat string direktori multi-level S = "/"+StorePath; String [] dirs = s.split ("/"); ftp.changeworkingdirectory ("/"); // Periksa apakah direktori ada secara berurutan. Jika tidak ada, buat direktori untuk (int i = 1; dir! = Null && i <dirs.length; i ++) {if (! Ftp.changeworkingdirectory (dirs [i])) {if (ftp.makedirectory (iRs [i])) {if (! Ftp.changework (i ife) {ftp.chang. }} else {return false; }}} // Setel direktori operasi file ftp.changeworkingdirectory (storePath); // Atur jenis file, biner ftp.setFileType (ftpclient.binary_file_type); // atur ukuran buffer ftp.setBufferSize (3072); // Unggah hasil file = ftp.storefile (nama file, is); // tutup aliran input adalah.close (); // Logout server ftp.logout (); } catch (ioException e) {e.printstacktrace (); } akhirnya {coba {// periksa if (null! = is) {// tutup aliran input is.close (); } // Periksa apakah koneksi ada jika (ftp.isconnected ()) {// lepaskan ftp.disconnect (); }} catch (ioException e) {E.PrintStackTrace (); }} hasil pengembalian; } /** * Download file from the FTP server to local* * @param url * Server IP address * @param port * Server port * @param userName * User login name * @param password * User login password * @param remotePath * Server file storage path * @param fileName * Server file storage name * @param localPath * Local file storage path * @return * <b>true</b>: Download successfully* <br/> * <b> false </b>: unduh gagal*/ public static boolean retrievefile (string url, int port, string username, string kata sandi, string remotePath, string fileName, string localpath) {boolean hasil = false; Ftpreply.ispositiveCompletion (ftp.getReplyCode ())) {// Putuskan sambungan saat port tidak legal; // Akhiri hasil pengembalian program; } // Atur direktori operasi file ftp.changeworkingdirectory (remotePath); // Atur jenis file, biner ftp.setFileType (ftpclient.binary_file_type); // atur ukuran buffer ftp.setBufferSize (3072); // Atur karakter pengkodean ftp.setControlencoding ("UTF-8"); // buat file objek file lokal localfile = file baru (localpath + "/" + fileName); // Dapatkan semua nama file di string direktori operasi file [] remoteNames = ftp.listNames (); // Looping nama file untuk menentukan apakah berisi nama file yang akan diunduh untuk (string remoteName: remoteNames) {if (filename.equals (remoteName)) {result = true; }} // Saat perbandingan nama file berhasil, masukkan proses unduhan jika (hasil) {// buat aliran file output os = fileoutputStream baru (localfile); // Unduh hasil file = ftp.retrievefile (fileName, OS); // tutup aliran output os.close (); } // keluar dari server ftp.logout (); } catch (ioException e) {e.printstacktrace (); } akhirnya {coba {// Tentukan apakah aliran output ada jika (null! = os) {// tutup aliran output os.close (); } // Tentukan apakah ada koneksi jika (ftp.isconnected ()) {// lepaskan ftp.disconnect (); }} catch (ioException e) {E.PrintStackTrace (); }} hasil pengembalian; } /** * Delete file from the FTP server* * @param url * Server IP address* @param port* @param userName * User login name* @param password * User login password* @param remotePath * Server file storage path* @param fileName * Server file storage name* @return * <b>true</b>: Deletion was successful* <br/> * <b>false</b>: Deletion failed*/ public static boolean deleteFile (string url, int port, string nama pengguna, kata sandi string, string remotePath, string fileName) {boolean hasil = false; FtpClient ftp = ftpclient baru (); coba {// Saat menghubungkan ke server, port default ke 21, Anda dapat langsung menghubungkan ftp.connect (url, port); // Masuk ke server ftp.login (nama pengguna, kata sandi); // Tentukan apakah kode pengembalian itu legal jika (! Ftpreply.ispositiveCompletion (ftp.getReplycode ())) {// Putuskan sambungan saat tidak legal ftp.disconnect (); // Akhiri hasil pengembalian program; } // Atur direktori operasi file ftp.changeworkingdirectory (remotePath); // Atur jenis file, biner ftp.setFileType (ftpclient.binary_file_type); // atur ukuran buffer ftp.setBufferSize (3072); // Atur karakter pengkodean ftp.setControlencoding ("UTF-8"); // Dapatkan semua nama file di string direktori operasi file [] remoteNames = ftp.listNames (); // loop untuk membandingkan nama file untuk menentukan apakah nama file yang akan diunduh saat ini terkandung untuk (string remoteName: remoteNames) {if (filename.equals (remoteName)) {result = true; }} // Ketika perbandingan nama file berhasil, masukkan proses penghapusan jika (hasil) {// hapus hasil file = ftp.deleteFile (fileName); } // keluar dari server ftp.logout (); } catch (ioException e) {e.printstacktrace (); } akhirnya {coba {// Tentukan apakah koneksi ada jika (ftp.isconnected ()) {// lepaskan ftp.disconnect (); }} catch (ioException e) {E.PrintStackTrace (); }} hasil pengembalian; } public static void main (string [] args) melempar filenotfoundException {// coba {// fileInputStream fis = new fileInputStream (file baru ("d:/soft storage/soft toolbox/html_help_workshop_1.3_xiazaiba.zip"); // System.out.println (StoreFile ("192.168.1.2", 21, "Admin", "1", "C:/Dokumen dan Pengaturan/Administrator/Desktop", Randomuuid.random () + ".zip", FIS)); //} catch (FileNotFoundException e) {// E.PrintStackTrace (); //} // // file file = file baru ("c: /users/freed/desktop/1.txt"); // inputStream adalah = FileInputStream baru (file); //System.out.println(storefile("127.0.0.1 ", 21," feili "," feili "," contoh "," 2.txt ", is)); //System.out.println(retrievefile("127.0.0.1 ", 21," feili "," feili "," Contoh/jsp "," index.html "," c:/user/freed/desktop ")); //System.out.println(deleteFile("127.0.0.1 ", 21," feili "," feili "," testpath "," 1.txt ")); }}Perlu dicatat bahwa saat mengunggah file, Anda harus terlebih dahulu memasukkan file ke fileInputStream.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.