Hace unos días, hice un proyecto. El cliente y el administrador fueron escritos juntos, y compartieron el mismo servidor. Los archivos cargados por el cliente estaban todos en el disco duro del servidor. Lao Long propuso separar al cliente y el lado del administrador, y en este momento había un problema con el almacenamiento de los archivos adjuntos cargados por el usuario. Obviamente, no es realista almacenar archivos APK que son tan grandes como cientos de m a la base de datos. Después de verificar durante mucho tiempo, es la forma más rápida de establecer un servidor FTP para transmitir archivos en ambos extremos.
El proceso específico es que el usuario inicia sesión en el cliente de red externo y carga el archivo en el disco duro del servidor de red externo. Al mismo tiempo, el archivo accede al servidor FTP del servidor Administrador de Intranet a través del servidor de red externo y lo pasa al disco duro del servidor Intranet. De esta manera, el servidor Intranet puede cifrar y registrar los archivos cargados, y luego pasar los archivos al disco duro del servidor de red externo a través de FTP para que los usuarios realicen otras operaciones.
Las herramientas utilizadas en la implementación específica: Serv-U. Serv-U es una herramienta que nos facilita establecer un servidor FTP en Windows. Después de descargar y agrietarse, siga los pasos, configure la IP, el puerto, la contraseña de la cuenta, la ruta de disco que permite el acceso FTP, los permisos de operación, etc., y puede usarlo. Al probar la IP, elija 127.0.0.1, y al probar la IP en la intranet, elija 192.168.0.x.
En la implementación del proyecto Java, escribí una clase de herramientas y usé el paquete Commons-Net de Apache, que tiene funciones de carga, descarga y eliminación. Código adjunto:
paquete 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; importar org.apache.commons.net.ftp.ftpclient; importar org.apache.commons.net.ftp.ftpfile; importar org.apache.commons.net.ftp.ftpreply; /*** FTP Servidor Tool Class** /public class ftputils { /*** cargar archivo en el servidor ftp** @param url* dirección IP del servidor* @param puerto* puerto del servidor* @param nombre de usuario* nombre de inicio de sesión de usuario* @param contraseña* contraseña de inyección de usuarios* @param storePath de almacenamiento de archivo de archivo* @param filename* archivo de archivo* @ @@param contraseña* contraseña de registro de usuarios* @param almacenamiento de la tienda* storePath* Servidor de archivo de archivo* @param FileName* Servidor Archivo* @ @@Param Password* File Inyunta <b> true </b>: cargar correctamente* <br/>* <b> false </b>: cargar fallido*/public static boolean storeFile (string url, int puerto, nombre de usuario de cadena, contraseña de cadena, string storePath, cadena de archivo de archivo, inputStream es) {resultado boolean = false; FtpClient ftp = new ftpClient (); Pruebe {// Al conectarse al servidor, el puerto predeterminado a 21, puede conectar directamente ftp.connect (url, puerto); // Iniciar sesión en el servidor ftp.login (nombre de usuario, contraseña); // Determinar si el código de retorno es legal si (! Ftpreply.ispositiveCompletion (ftp.getReplyCode ())) {// Desconecte cuando se ilegal ftp.disconnect (); // finalizar el resultado de retorno del programa; } // Determinar si existe el directorio FTP. Si no existe, cree un directorio, incluida la creación de una cadena de directorio de niveles múltiples S = "/"+StorePath; Cadena [] dirs = s.split ("/"); ftp.changeWorkingDirectory ("/"); // Verifique si el directorio existe en orden. Si no existe, cree un directorio para (int i = 1; dirs! = Null && i <dirs.length; i ++) {if (! Ftp.changeworkingDirectory (dirs [i])) {if (ftp.makedirectory (dirs [i])) {if (! Ftp.changeworkingDirectectecter (dirs [i]); }} else {return false; }}} // Establecer Directorio de operación de archivo ftp.changeworkingDirectory (storePath); // Establecer el tipo de archivo, binario ftp.setfileType (ftpclient.binary_file_type); // establecer el tamaño del búfer ftp.setBufferSize (3072); // Resultado del archivo de carga = ftp.storeFile (nombre de archivo, is); // Cerrar la secuencia de entrada es.close (); // Inicie sesión en el servidor ftp.logout (); } catch (ioException e) {E.PrintStackTrace (); } Finalmente {try {// verifica si (null! = is) {// cierre el flujo de entrada es.close (); } // verifique si la conexión existe si (ftp.isconnected ()) {// desconectar ftp.disconnect (); }} catch (ioException e) {E.PrintStackTrace (); }} Resultado de retorno; }/** * Descargar archivo desde el servidor FTP a local * * @param URL * dirección IP del servidor * @param puerto * puerto de servidor * @param nombre de usuario * nombre de inicio de sesión de usuario * @param contraseña * contraseña de inicio de sesión de usuario * @param remotepath * ruta de almacenamiento de archivos del servidor * @param filen archivo de archivo de archivo * @param localpath * ruta de almacenamiento de archivo local * @return * <</n. <b> false </b>: descargar fallido*/ public static boolean RomellyFile (string url, int port, string username, string contraseña, string remotePath, string fileName, string localpath) {boolean resultado = false; Ftpreply.ispositiveCompletion (ftp.getReplyCode ())) {// Desconectar cuando el puerto no es legal; // finalizar el resultado de retorno del programa; } // Establecer el directorio de operación de archivo ftp.changeworkingDirectory (remotePath); // Establecer el tipo de archivo, ftp.setfileType (ftpclient.binary_file_type); // establecer el tamaño del búfer ftp.setBufferSize (3072); // establecer el personaje que codifica ftp.setControlEncoding ("UTF-8"); // construye el archivo de objeto de archivo local local = nuevo archivo (localpath + "/" + nombre de archivo); // Obtenga todos los nombres de archivo en la cadena de directorio de operación de archivo [] remotenames = ftp.listnames (); // bucle el nombre del archivo para determinar si contiene el nombre del archivo que se descargará para (string remoteName: remoteNames) {if (filename.equals (remoteName)) {result = true; }} // Cuando la comparación del nombre del archivo es exitosa, ingrese el proceso de descarga si (resultado) {// construye la salida de salida del archivo OS = new FileOutputStream (LocalFile); // Descargar el resultado del archivo = ftp.retrievefile (nombre de archivo, os); // cierre la transmisión de salida OS.Close (); } // cierre el servidor ftp.logout (); } catch (ioException e) {E.PrintStackTrace (); } Finalmente {try {// Determine si la secuencia de salida existe si (null! = os) {// cierre la transmisión de salida os.close (); } // Determine si la conexión existe si (ftp.isconnected ()) {// desconectar ftp.disconnect (); }} catch (ioException e) {E.PrintStackTrace (); }} Resultado de retorno; } /** * 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 (); Pruebe {// Al conectarse al servidor, el puerto predeterminado a 21, puede conectar directamente ftp.connect (url, puerto); // Iniciar sesión en el servidor ftp.login (nombre de usuario, contraseña); // Determinar si el código de retorno es legal si (! Ftpreply.ispositiveCompletion (ftp.getReplyCode ())) {// Desconecte cuando no es legal ftp.disconnect (); // finalizar el resultado de retorno del programa; } // Establecer el directorio de operación de archivo ftp.changeworkingDirectory (remotePath); // Establecer el tipo de archivo, ftp.setfileType (ftpclient.binary_file_type); // establecer el tamaño del búfer ftp.setBufferSize (3072); // establecer el personaje que codifica ftp.setControlEncoding ("UTF-8"); // Obtenga todos los nombres de archivo en la cadena de directorio de operación de archivo [] remotenames = ftp.listnames (); // bucle para comparar los nombres de archivo para determinar si el nombre del archivo que se descargará está actualmente contenido para (String remoteName: remoteNames) {if (filename.equals (remoteName)) {result = true; }} // Cuando la comparación del nombre del archivo es exitosa, ingrese el proceso de deleción si (resultado) {// eliminar el resultado del archivo = ftp.deleteFile (nombre de archivo); } // Soge fuera del servidor ftp.logout (); } catch (ioException e) {E.PrintStackTrace (); } Finalmente {try {// Determine si la conexión existe si (ftp.isconnected ()) {// desconectar ftp.disconnect (); }} catch (ioException e) {E.PrintStackTrace (); }} Resultado de retorno; } public static void main (string [] args) lanza FileNotFoundException {// intenta {// fileInputStream Fis = new FileInputStream (nuevo archivo ("D:/Soft Storage/Soff Toolbox/Html_help_workshop_1.3_xiazaiba.zip")); // System.out.println (StoreFile ("192.168.1.2", 21, "Admin", "1", "C:/Documentos y Configuración/Administrador/Desktop", RandomUuid.random () + ".zip", Fis)); //} Catch (FileNotFoundException e) {// E.PrintStackTrace (); //} // // archivo file = nuevo archivo ("c: /users/freed/desktop/1.txt"); // InputStream es = nuevo FileInputStream (archivo); //System.out.println(storeFile("127.0.0.1 ", 21," feili "," feili "," ejemplos "," 2.txt ", is)); //System.out.println(tredrieveFile("127.0.0.1 ", 21," Feili "," Feili "," Ejemplos/JSP "," index.html "," c:/users/liber/escritorio ")); //System.out.println(deleteFile("127.0.0.1 ", 21," Feili "," Feili "," TestPath "," 1.txt "); }}Cabe señalar que al cargar archivos, primero debe colocar el archivo del archivo en FileInputStream.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.