Il y a quelques jours, j'ai fait un projet. Le client et l'administrateur ont été écrits ensemble et ont partagé le même serveur. Les fichiers téléchargés par le client étaient tous sur le disque dur du serveur. Lao Long a proposé de séparer le client et le côté administrateur, et à ce moment, il y avait un problème avec le stockage des pièces jointes téléchargées par l'utilisateur. De toute évidence, il n'est pas réaliste de stocker des fichiers APK qui sont aussi importants que des centaines de M à la base de données. Après avoir vérifié longtemps, c'est le moyen le plus rapide d'établir un serveur FTP pour transmettre des fichiers aux deux extrémités.
Le processus spécifique est que l'utilisateur se connecte au client réseau externe et télécharge le fichier sur le disque dur du serveur réseau externe. Dans le même temps, le fichier accède au serveur FTP du serveur d'administrateur Intranet via le serveur réseau externe et le transmet au disque dur du serveur Intranet. De cette façon, le serveur Intranet peut crypter et signer les fichiers téléchargés, puis transmettre les fichiers au disque dur du serveur réseau externe via FTP pour les utilisateurs pour effectuer d'autres opérations.
Les outils utilisés dans la mise en œuvre spécifique: Serv-U. Serv-U est un outil qui nous facilite pour établir un serveur FTP sur Windows. Après avoir téléchargé et craqué, suivez les étapes, définissez l'IP, le port, le mot de passe du compte, le chemin du disque qui permet l'accès FTP, les autorisations de fonctionnement, etc., et vous pouvez l'utiliser. Lorsque vous testez l'IP, choisissez 127.0.0.1, et lorsque vous testez l'IP dans l'intranet, choisissez 192.168.0.x.
Dans la mise en œuvre du projet Java, j'ai moi-même écrit une classe d'outils et utilisé le package Commons-Net d'Apache, qui a des fonctions de téléchargement, de téléchargement et de supprimer. Code joint:
package app.ftp; Importer java.io.file; import java.io.fileInputStream; import java.io.filenotfoundException; Importer java.io.fileOutputStream; Importer 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 Server Tool Class * * / public class ftputils {/ ** * Télécharger le fichier sur FTP Server * * @Param URL * Adresse IP du serveur * @param port * Port du serveur * @param nom d'utilisateur * nom de connexion utilisateur * @param mot de passe * Utilisateur de mot de passe de logiciel <b> true </b>: Télécharger avec succès * <br/> * <b> false </b>: Téléchargez l'échec * / public static boolean storefile (URL de chaîne, port int, nom d'utilisateur de chaîne, mot de passe de chaîne, string storePath, string filename, inputStream is) {boolean result = false; FtpClient ftp = new ftpClient (); Essayez {// Lors de la connexion au serveur, le port par défaut est à 21, vous pouvez connecter directement FTP.Connect (URL, port); // Connectez-vous au serveur ftp.login (nom d'utilisateur, mot de passe); // Déterminez si le code de retour est légal si (! Ftpreply.ispositive-completion (ftp.getReplyCode ())) {// Déconnectez-vous lorsque illégal ftp.disconnect (); // terminer le résultat de retour du programme; } // Déterminez si le répertoire FTP existe. S'il n'existe pas, créez un répertoire, y compris la création d'une chaîne de répertoire à plusieurs niveaux S = "/" + StorePath; String [] dirs = s.split ("/"); ftp.changeworkingDirectory ("/"); // Vérifiez si le répertoire existe dans l'ordre. S'il n'existe pas, créez un répertoire pour (int i = 1; dirs! = Null && i <dirs.length; i ++) {if (! Ftp.changeworkingdirectory (dirs [i])) {if (ftp.makedirectory (dirs [i])) {if (! Ftp.changeworkingDirectory (dirs [i]) {return false; }} else {return false; }}} // Définir le répertoire de l'opération de fichier ftp.changeworkingDirectory (StorePath); // Définir le type de fichier, binaire ftp.setFileType (ftpclient.binary_file_type); // définir la taille du tampon ftp.setBuffeSize (3072); // Télécharger le fichier résultat = ftp.storefile (nom de fichier, IS); // Fermer le flux d'entrée est.close (); // déconnectez le serveur ftp.logout (); } catch (ioException e) {e.printStackTrace (); } enfin {try {// vérifier if (null! = is) {// Fermer le flux d'entrée is.close (); } // Vérifiez si la connexion existe if (ftp.isconnected ()) {// déconnecter ftp.disconnect (); }} catch (ioException e) {e.printStackTrace (); }} Retour Résultat; } / ** * Télécharger le fichier depuis le serveur FTP vers local * * @param URL * Adresse IP du serveur * @param port * Port serveur * @param nom d'utilisateur * Nom de la connexion de l'utilisateur * @param mot de passe * Nom de la connexion de l'utilisateur * @param Remotepath * Path de stockage de fichiers du serveur * @Param FileName * Server Nom de stockage de fichiers * @param localpath * Local Storage * @return * <b> false </b>: téléchargement échoué * / public static boolean retrievefile (URL de chaîne, port int, nom d'utilisateur de chaîne, mot de passe de chaîne, string remotepath, string filename, string localPath) {boolean result = false; Ftpreply.ispositivecompletion (ftp.getReplyCode ())) {// Déconnectez-vous lorsque le port n'est pas légal; // terminer le résultat de retour du programme; } // Définissez le répertoire de l'opération de fichier ftp.changeworkingDirectory (RemotePath); // Définit le type de fichier, binaire ftp.setFileType (ftpclient.binary_file_type); // définir la taille du tampon ftp.setBuffeSize (3072); // Définit le codage des caractères ftp.setControleCcoding ("UTF-8"); // Construire le fichier de fichier local File localFile = nouveau fichier (localPath + "/" + filename); // Obtenez tous les noms de fichiers dans la chaîne du répertoire de l'opération de fichier [] Remotenames = ftp.listNames (); // en boucle le nom du fichier pour déterminer s'il contient le nom de fichier à télécharger pour (String Remotename: RemoTenames) {if (filename.equals (remotename)) {result = true; }} // Lorsque la comparaison du nom de fichier réussit, entrez le processus de téléchargement if (result) {// construire le flux de sortie du fichier os = new FileOutputStream (localfile); // Téléchargez le fichier résultat = ftp.RetReeveFile (nom de fichier, OS); // ferme le flux de sortie os.close (); } // déconnectez le serveur ftp.logout (); } catch (ioException e) {e.printStackTrace (); } Enfin {try {// Déterminez si le flux de sortie existe if (null! = os) {// Fermez le flux de sortie os.close (); } // Déterminez si la connexion existe if (ftp.isconnected ()) {// déconnecter ftp.disconnect (); }} catch (ioException e) {e.printStackTrace (); }} Retour Résultat; } / ** * Supprimer le fichier du serveur FTP * * @Param URL * Adresse IP du serveur * @param port * @param nom d'utilisateur * Nom de la connexion de l'utilisateur * @param mot de passe * Mot de passe de la connexion de l'utilisateur * @param RemotePath * Path de stockage de fichiers du serveur * @Param FileName * Server Nom du fichier de serveur * @return * <B> TRUE </ B>: Deletion a été réussi * <br/> * * * <B> FACK public static boolean DeleteFile (URL de chaîne, port int, nom d'utilisateur de chaîne, mot de passe de chaîne, chaîne RemotePath, nom de filen de chaîne) {booléen result = false; FtpClient ftp = new ftpClient (); Essayez {// Lors de la connexion au serveur, le port par défaut est à 21, vous pouvez connecter directement FTP.Connect (URL, port); // Connectez-vous au serveur ftp.login (nom d'utilisateur, mot de passe); // Déterminez si le code de retour est légal si (! Ftpreply.ispositive-completion (ftp.getReplyCode ())) {// Débrancher quand il n'est pas légal ftp.disconnect (); // terminer le résultat de retour du programme; } // Définissez le répertoire de l'opération de fichier ftp.changeworkingDirectory (RemotePath); // Définit le type de fichier, binaire ftp.setFileType (ftpclient.binary_file_type); // définir la taille du tampon ftp.setBuffeSize (3072); // Définit le codage des caractères ftp.setControleCcoding ("UTF-8"); // Obtenez tous les noms de fichiers dans la chaîne du répertoire de l'opération de fichier [] Remotenames = ftp.listNames (); // Loop pour comparer les noms de fichiers pour déterminer si le nom de fichier à télécharger est actuellement contenu pour (String RemoTename: RemoTenames) {if (filename.equals (RemoTename)) {result = true; }} // Lorsque la comparaison du nom de fichier réussit, entrez le processus de suppression if (result) {// delete le fichier result = ftp.deleteFile (nom de fichier); } // Connexion du serveur ftp.logout (); } catch (ioException e) {e.printStackTrace (); } Enfin {try {// Déterminez si la connexion existe if (ftp.isconnected ()) {// déconnecter ftp.disconnect (); }} catch (ioException e) {e.printStackTrace (); }} Retour Résultat; } public static void main (string [] args) lève filenotfoundException {// try {// fileInputStream fis = new FileInputStream (nouveau fichier ("d: / soft storage / soft toolbox / html_help_workshop_1.3_xiazaiba.zip")); // System.out.println (StoreFile ("192.168.1.2", 21, "admin", "1", "c: / documents et paramètres / administrateur / bureau", randomUuid.random () + ".zip", fis)); //} catch (filenotFoundException e) {// e.printStackTrace (); //} // // file file = new File ("c: /users/freed/desktop/1.txt"); // inputStream est = new FileInputStream (fichier); //System.out.println(storefile("127.0.0.1 ", 21," feili "," feili "," exemples "," 2.txt ", IS)); //System.out.println(ReretRevefile("127.0.0.1 ", 21," feili "," feili "," Exemples / jsp "," index.html "," c: / users / libérer / de bureau ")); //System.out.println(deletefile("127.0.0.1 ", 21," feili "," feili "," testpath "," 1.txt ")); }}Il convient de noter que lors du téléchargement de fichiers, vous devez d'abord mettre le fichier de fichier dans le fichierInputStream.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.