Несколько дней назад я сделал проект. Клиент и администратор были написаны вместе, и они поделились одним и тем же сервером. Файлы, загруженные клиентом, были на жестком диске сервера. LAO LONG предложил разделить клиента и сторону администратора, и в настоящее время возникла проблема с хранением вложений, загруженных пользователем. Очевидно, что нереально хранить APK -файлы, которые составляют сотни M в базу данных. После проверки в течение долгого времени это самый быстрый способ создать FTP -сервер для передачи файлов на обоих концах.
Конкретный процесс заключается в том, что пользователь входит в вход во внешний сетевой клиент и загружает файл на жесткий диск внешнего сетевого сервера. В то же время файл обращается к серверу FTP сервера администратора Intranet через внешний сетевой сервер и передает его на жесткий диск Intranet Server. Таким образом, интранет -сервер может шифровать и подписывать загруженные файлы, а затем передавать файлы обратно на жесткий диск внешнего сетевого сервера через FTP для пользователей для выполнения других операций.
Инструменты, используемые в конкретной реализации: Serv-U. Serv-U-это инструмент, который облегчает нас создать FTP-сервер в Windows. После загрузки и взлома следуйте шагам, установите IP, порт, пароль учетной записи, путь диска, который позволяет доступ к FTP, разрешения на работу и т. Д., И вы можете использовать его. При тестировании IP, выберите 127.0.0.1, и при тестировании IP во интрасети выберите 192.168.0.x.
В реализации проекта Java я сам написал класс инструментов и использовал пакет Apache Commons-Net, который выполняет функции загрузки, загрузки и удаления. Прилагаемый код:
пакет app.ftp; Импорт java.io.file; импортировать java.io.fileinputstream; Импорт java.io.filenotFoundException; Импорт java.io.fileOutputStream; импортировать java.io.ioexception; импортировать java.io.inputstream; импортировать java.io.outputstream; Import org.apache.commons.net.ftp.ftpclient; Import org.apache.commons.net.ftp.ftpfile; Импорт 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>: загрузка успешно* <br/>* <b> false </b>: upload не удастся*/public static boolean storefile (string url, int port, string username, String password, String storichpath, string filename, inputstream is) {boolean result = false; Ftpclient ftp = new ftpclient (); Попробуйте {// При подключении к серверу порт по умолчанию к 21, вы можете напрямую подключить ftp.connect (url, порт); // Войти на сервер ftp.login (имя пользователя, пароль); // определить, является ли код возврата законным, если (! Ftpreply.ispositivecoplusion (ftp.getReplyCode ())) {// Отключить при незаконном ftp.disconnect (); // завершить результат возврата программы; } // Определите, существует ли каталог FTP. Если его не существует, создайте каталог, включая создание многоуровневой строки каталогов S = "/"+StorePath; String [] 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 (! }} else {return false; }}} // Установить каталог работы файла FTP.ChangeWorkingDirectory (storePath); // Установить тип файла, двоичный ftp.setfiletype (ftpclient.binary_file_type); // Установить размер буфера ftp.setBuffersize (3072); // result file result = ftp.storefile (имя файла, IS); // закрыть входной поток is.close (); // Выход на сервер ftp.logout (); } catch (ioException e) {e.printstackTrace (); } наконец {try {// проверить if (null! = IS) {// Закройте входной поток is.close (); } // Проверьте, существует ли соединение if (ftp.isconnected ()) {// отключить ftp.disconnect (); }} catch (ioException e) {e.printstacktrace (); }} return result; }/** * Загрузить файл с FTP -сервера на локальный * * @param URL * IP -адрес сервера * @param порт * порт сервера * @param username * Имя входа в систему * @param * Пароль для входа в систему * @param remotepath * pail * @return * @param filename * server name * @param localpath * local file Path * @return * @param fileName. <b> false </ b>: скачать не удастся*/ public static boolean retrievefile (string url, int port, string username, String password, String remotePath, String filename, String localPath) {boolean result = false; Ftpreply.ispositivecoplusion (ftp.getReplyCode ())) {// отключить, когда порт не является законным; // завершить результат возврата программы; } // Установить каталог операций файла ftp.changeWorkingDirectory (remotePath); // Установить тип файла, двоичный ftp.setfiletype (ftpclient.binary_file_type); // Установить размер буфера ftp.setBuffersize (3072); // Установить символ символов ftp.setControLeNcoding ("UTF-8"); // Создание локального файла файла файла localfile = new File (localPath + "/" + filename); // Получить все имена файлов в строке каталога операций файла [] remoteNames = ftp.illynames (); // Описать имя файла, чтобы определить, содержит ли он имя файла, которое будет загружено для (string remoteName: remoteNames) {if (filename.equals (remoteName)) {result = true; }} // Когда сравнение имен файла будет успешным, введите процесс загрузки if (result) {// Создание выходного потока файла OS = new FileOutputStream (localFile); // Загрузите файл result = ftp.retrievefile (filename, os); // закрыть выходной поток os.close (); } // Выберите сервер ftp.logout (); } catch (ioException e) {e.printstackTrace (); } наконец {try {// определить, существует ли выходной поток if (null! = OS) {// Закройте выходной поток os.close (); } // определить, существует ли соединение if (ftp.isconned ()) {// отключить ftp.disconnect (); }} catch (ioException e) {e.printstacktrace (); }} return result; } /** * 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 username, String password, String remotePath, String filename) {boolean result = false; Ftpclient ftp = new ftpclient (); Попробуйте {// При подключении к серверу порт по умолчанию к 21, вы можете напрямую подключить ftp.connect (url, порт); // Войти на сервер ftp.login (имя пользователя, пароль); // определить, является ли код возврата законным, если (! Ftpreply.ispositivecoplusion (ftp.getReplyCode ())) {// Отключить, когда он не является законным ftp.disconnect (); // завершить результат возврата программы; } // Установить каталог операций файла ftp.changeWorkingDirectory (remotePath); // Установить тип файла, двоичный ftp.setfiletype (ftpclient.binary_file_type); // Установить размер буфера ftp.setBuffersize (3072); // Установить символ символов ftp.setControLeNcoding ("UTF-8"); // Получить все имена файлов в строке каталога операций файла [] remoteNames = ftp.illynames (); // цикл, чтобы сравнить имена файлов, чтобы определить, является ли имя файла, которое нужно загрузить, в настоящее время содержится для (string remoteName: remoteNames) {if (filename.equals (remoteName)) {result = true; }} // Когда сравнение имен файла будет успешным, введите процесс удаления if (result) {// delete file result = ftp.deletefile (filename); } // Выйти из сервера ftp.logout (); } catch (ioException e) {e.printstackTrace (); } наконец {try {// определить, существует ли соединение if (ftp.isconnected ()) {// отключить ftp.disconnect (); }} catch (ioException e) {e.printstacktrace (); }} return result; } public static void main (string [] args) бросает filenotfoundexception {// try {// fileInputStream fis = new FileInputStream (New File ("D:/Soft Storage/Soft Toolbox/html_Help_workshop_1.3_xiaba.zip")); // 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 (); //} // // file file = new File ("c: /users/freed/desktop/1.txt"); // inputStream is = new FileInputStream (file); //System.out.println(storefile("127.0.0.1 ", 21," feili "," feili "," Примеры "," 2.txt ", IS)); //System.out.println(retrievefile("127.0.0.1 ", 21," feili "," feili "," Примеры/jsp "," index.html "," c:/user/freed/desktop "); //System.out.println(deletefile("127.0.0.1 ", 21," feili "," feili "," testpath "," 1.txt ")); }}Следует отметить, что при загрузке файлов вы должны сначала поместить файл файла в файл fileInputStream.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.