Si vous avez besoin de télécharger des fichiers sur des serveurs, vous téléchargez nos fichiers locaux sur le serveur de ressources. La meilleure façon est de les télécharger via FTP. Ceci est téléchargé en combinaison avec SpringMVC + FTP. Nous devons d'abord comprendre comment configurer SpringMVC, puis configurer FTP et enfin télécharger le fichier en combinaison avec MultipartFile.
Le téléchargement de SpringMVC nécessite plusieurs packages de bocaux de clés, le printemps et les packages associés peuvent être configurés par vous-même. Ici, nous expliquons principalement les packages de bocaux clés
1: printemps-web-3.2.9.release.jar (le paquet de jar clé du printemps, vous pouvez choisir la version vous-même)
2: Commons-io-2.2.jar (certains packages d'outils utilisés pour gérer IO dans le projet)
Fichier de configuration
SpringMvc utilise MultiartFile pour télécharger des fichiers, nous devons donc configurer MultipartResolver pour gérer les fichiers dans le formulaire
<! - Téléchargez l'interprète de fichiers -> <bean id = "multipartResolver"> <propriété name = "defayencoding" value = "utf-8" /> <propriété name = "maxuploadsize" value = "10485760" /> <propriété name = "maxinMemorySize" value = "4096" /> <propriété Name = "Resolvelvely"
Les attributs sont expliqués en détail:
DefaunCencoding Configure le format de codage de la demande, par défaut ISO-8859-1
L'unité maximale du fichier de configuration de MaxuploadSize, en octets
MaxinMemorySize configure le cache des fichiers téléchargés, en octets
La propriété résolvezément est autorisée à retarder la résolution des fichiers afin que les exceptions de taille de fichier puissent être capturées dans UploadAction
Configuration de la page
Ajouter ENCTYPE = "Multipart / Form-Data" à la forme de la page
<form id = "" name = "" méthode = "post" action = "" enctype = "multipart / form-data">
Définissez ENCTYPE = "Multipart / Form-Data" dans la balise de formulaire pour assurer le codage correct du fichier anonyme téléchargé.
C'est le codage mime de la forme. Par défaut, ce format de codage est Application / X-WWW-Form-Urlencoded, qui ne peut pas être utilisé pour le téléchargement de fichiers; Ce n'est qu'en utilisant des données multiparts / formulaires que les données de fichier peuvent être complètement transmises et les opérations suivantes sont effectuées. ENCTYPE = "Multipart / Form-Data" consiste à télécharger des données binaires. La valeur d'entrée dans le formulaire est passé de manière à 2 chiffres, de sorte que la demande ne peut pas obtenir la valeur.
Classe de contrôle de téléchargement d'écriture
Écrivez une méthode de téléchargement et aucun résultat n'est renvoyé ici. Si vous devez passer à la page ou retourner d'autres valeurs, vous pouvez modifier void en chaîne, map <string, objet> et d'autres valeurs, puis revenir pour retourner pour retourner le résultat.
/ ** * upload * @param demande * @return * / @ResponseBody @RequestMapping (value = "/ upload", méthode = {requestMethod.get, requestMethod.Post}) public void upload (httpServleRequest request) {multiparthTTPServletRequest multiparTeSt = (multiparThTTTTTServLetRequest). MultipartFile file = multipartReQuest.getFile ("fichier"); // le fichier est le nom du nom de la chaîne d'entrée de page baspath = "Path de fichier" try {multipartResolver résolver = new ComonsMultipArtResolver (request.getSession (). GetServletContext ()); if (résolver.ismultupar (request)) {String FileSoredPath = "Folder Path"; // Nom de fichier généré aléatoire String randomname = stringUtil.getRandomFileName (); String uploadFileName = file.getoriginalFileName (); if (stringUtils.isnotblank (uploadFileName)) {// intercepter le nom de format de fichier String suffix = uploadFileName.substring (uploadFileName.Indexof (".")); // Réassemblez la chaîne de nom de fichier newFileName = randomname + suffixe; String SavePath = basepath + "/" + newFileName; Fichier SaveFile = new File (SavePath); Fichier parentFile = SaveFile.getParentFile (); if (SaveFile.exists ()) {SaveFile.Delete (); } else {if (! parentFile.exists ()) {parentFile.mkDirs (); }} // Copiez le fichier dans le chemin d'accès spécifié FileUtils.copyInputStreamtoFile (file.getInputStream (), SaveFile); // Téléchargez le fichier sur le serveur ftpclientUtil.upload (SaveFile, filestoredPath); }}} catch (exception e) {e.printStackTrace (); }} Outil de téléchargement du client FTP
Package com.yuananding.common.util; Importer java.io.file; import java.io.fileInputStream; Importer java.io.fileOutputStream; Importer java.io.ioException; import java.io.inputStream; import java.io.outputStream; import java.net.socketException; import java.util.hashmap; importation java.util.map; import java.util.properties; import org.apache.commons.lang.stringutils; import org.apache.commons.net.ftp.ftp; import org.apache.commons.net.ftp.ftpclient; import org.apache.commons.net.ftp.ftpreply; import org.slf4j.logger; import org.slf4j.loggerfactory; / ** * FTP Client Tools * / public class ftpClientUtil {/ ** * log * / private static final logger = loggerfactory.getLogger (ftpclientUtil.class); / ** * FTP Server Configuration - touche IP, la valeur est le type de chaîne * / public static final string server_ip = "server_ip"; / ** * FTP Server Configuration - clé Port, la valeur est type d'intégralité * / public static final String Server_port = "Server_port"; / ** * Configuration du serveur FTP - clé de connexion anonyme, la valeur est le type de booléen * / public statique final String is_anonymous = "is_anonymous"; / ** * Nom d'utilisateur d'Anonymous Connexion * / Public Static Final String Anonymous_User_Name = "Anonymous"; / ** * Mot de passe de la connexion anonyme * / public static final String anonymous_password = ""; / ** * Configuration du serveur FTP - Log dans le nom d'utilisateur, la valeur est le type de chaîne * / public static final String user_name = "user_name"; / ** * Configuration du serveur FTP - log dans le mot de passe, la valeur est le type de chaîne * / public static final String mot de passe = "mot de passe"; / ** * Configuration du serveur FTP - touche PASV, la valeur est type de booléen * / public statique final static is_pasv = "is_pasv"; / ** * Configuration du serveur FTP - Clé de répertoire de travail, la valeur est le type de chaîne lors de la connexion, le répertoire actuel * est le répertoire personnel de l'utilisateur, le travail de travail doit être défini en fonction. En outre, le WorkingDirectory doit * exister, il ne peut pas être créé automatiquement. S'il ne s'agit pas, le fichier sera téléchargé dans le répertoire domestique de l'utilisateur. Si * non affecté, "/" est utilisé. * / public static final string working_directory = "working_directory"; Map statique publique <String, objet> servercfg = new HashMap <String, Object> (); Propriétés statiques Prop; statique {logger.info ("Démarrer le chargement du fichier ftp.properties!"); Prop = new Properties (); try {inputStream fps = ftpclientUtil.class.getResourceSStream ("/ ftp.properties"); Prop.Load (FPS); fps.close (); } catch (exception e) {logger.error ("Exception lit le fichier ftp.properties!", e); } servercfg.put (ftpclientUtil.server_ip, valeurs ("server_ip")); servercfg.put (ftpclientUtil.server_port, Integer.ParseInt (VALEUR ("Server_port"))); servercfg.put (ftpclientUtil.user_name, valeurs ("user_name")); servercfg.put (ftpclientUtil.password, valeurs ("mot de passe")); Logger.info (string.valueof (servercfg)); } / ** * Téléchargez un fichier sur FTP Server. * * @param servercfg: FTP Server Configuration * @param filepathtouplload: Chemin du fichier à télécharger * @param filestoredName: le nom pour remettre le fichier stocké à distance, null, "" et autre mot vierge FilePathTouplload, String FileSoredName) lève SocketException, ioException {upload (servercfg, nouveau fichier (filePathTouplload), filestoredName); } / ** * Téléchargez un fichier sur FTP Server. * * @param servercfg: FTP Server Configuration * @param filetouplload: fichier à télécharger * @param filestoredName: le nom pour donner le fichier stocké à distance, null, "" et un autre mot vierge sera remplacé * par le nom de fichier pour télécharger * @throws ioexception * @throws socketException * Filefload Public STATIC VOID upload upload (mA map String filestoredName) lève SocketException, ioException {if (! FiletUplload.exists ()) {Throw New illégalArgumentException ("Le fichier à télécharger n'existe pas:" + filetUplload.getAbsolutepath ()); } if (! filetouplload.isfile ()) {Throw New illégalArgumentException ("Le fichier à télécharger n'est pas un fichier:" + filetouplload.getabsolutepath ()); } if (stringUtils.isblank ((string) servercfg.get (server_ip))) {lancez new illégalArgumentException ("Server_ip doit être contenu dans la configuration du serveur FTP."); } transfertFile (true, servercfg, filetouplload, filestoredName, null, null); } /** * Download a file from FTP server * * @param serverCfg : FTP server configuration * @param fileNameToDownload : file name to be downloaded * @param fileStoredPath : stored path of the downloaded file in local * @throws SocketException * @throws IOException */ public static final void download(Map<String, Object> serverCfg, String fileNameToDownload, String FileSlosedPath) lève SocketException, ioException {if (stringUtils.isblank (filenametodownload)) {lancez new illégalargumentException ("Le nom de fichier à télécharger ne peut pas être vide."); } if (stringUtils.isblank (filestoredPath)) {Throw New illégalArgumentException ("Le chemin stocké du fichier téléchargé dans local ne peut pas être vide."); } if (stringUtils.isblank ((string) servercfg.get (server_ip))) {lancez new illégalArgumentException ("Server_ip doit être contenu dans la configuration du serveur FTP."); } transferfile (false, servercfg, null, null, filenametodownload, filestoredPath); } private static final void transfertfile (booléen isupload, map <string, objet> servercfg, fichier filetouplload, string serverFileStoredName, string filenametownload, string localFileStoredPath) lance schetexception, ioException {string host = (string) servercfg.get (server_ip); Integer Port = (Integer) servercfg.get (server_port); Booléen isanonymous = (booléen) servercfg.get (is_anonymous); String username = (string) servercfg.get (user_name); String mot de passe = (String) servercfg.get (mot de passe); Booléen ispasv = (booléen) servercfg.get (is_pasv); String workingDirectory = (String) servercfg.get (working_directory); FtpClient ftpClient = new ftpClient (); InputStream fileIn = null; OutputStream fileout = null; essayez {if (port == null) {logger.debug ("connecter au serveur ftp sur" + hôte + ":" + ftp.default_port); ftpClient.connect (hôte); } else {logger.debug ("Connecter au serveur FTP sur" + host + ":" + port); ftpclient.connect (hôte, port); } int réponse = ftpClient.getReplyCode (); if (! ftpreply.ispositivecompletion (réponse)) {Logger.Error ("FTP Server refuse la connexion"); retour; } if (isanonymous! = null && isanonymous) {username = anonymous_user_name; mot de passe = anonymous_password; } Logger.debug ("Connectez le serveur FTP avec username =" + username + ", mot de passe =" + mot de passe); if (! ftpclient.login (nom d'utilisateur, mot de passe)) {logger.error ("échoue à se connecter au serveur ftp avec username =" + username + ", mot de passe =" + mot de passe); ftpClient.logout (); retour; } // Ici, nous utiliserons le mode binaire comme type de fichier de transfert, // Le mode ASCII n'est pas pris en charge. Logger.debug ("Définissez le type du fichier, qui est à télécharger, sur binaire."); ftpClient.setFileType (ftp.binary_file_type); if (ispasv! = null && ispasv) {logger.debug ("Utilisez le mode PASV pour transférer le fichier."); ftpClient.enterLocalPassiveMode (); } else {logger.debug ("Utilisez le mode actif pour transférer le fichier."); ftpClient.enterLocalActiverMode (); } if (stringUtils.isblank (workingDirectory)) {workingDirectory = "/"; } Logger.debug ("Modifier le répertoire de travail actuel en" + workingDirectory); ChangeWorkingDirectory (ftpClient, WorkingDirectory); if (isupload) {// upload if (stringUtils.isblank (serverFileStoredName)) {serverFileStoredName = filetUplload.getName (); } fileIn = new FileInputStream (filetUplload); Logger.debug ("Télécharger le fichier:" + filetoupload.getAbsolutepath () + "To FTP Server avec le nom:" + serverFileStoredName); if (! ftpclient.storefile (serverFileStoredName, fileIn)) {logger.error ("échouer à télécharger le fichier," + ftpclient.getReplyString ()); } else {logger.debug ("Succès pour télécharger le fichier."); }} else {// download // Assurez-vous que le répertoire de fichiers existe un fichier filestored = new File (localFileStoredPath); if (! filestored.getParentFile (). existant ()) {filestored.getParentFile (). mkDirs (); } fileout = new FileOutputStream (filestored); Logger.debug ("Télécharger le fichier:" + filenametodownload + "du serveur FTP à local:" + localFileStoredPath); if (! ftpClient.RetReeveFile (filenametodownload, fileout)) {Logger.Error ("échouer à télécharger le fichier," + ftpclient.getReplyString ()); } else {logger.debug ("Success to Download File."); }} ftpclient.noop (); ftpClient.logout (); } enfin {if (ftpclient.isconnected ()) {try {ftpClient.disconnect (); } catch (ioException f) {}} if (fileIn! = null) {try {fileIn.close (); } catch (ioException e) {}} if (fileout! = null) {try {fileout.close (); } catch (ioException e) {}}} private static final boolean changeworkingdirectory (ftpclient ftpclient, string workingDirectory) lance ioException {if (! ftpclient.changeworkingDirectory (workingDirectory))) {string [] paths = workingDirectory.split (""); for (int i = 0; i <paths.length; i ++) {if (! "". equals (paths [i])) {if (! ftpclient.changeworkingDirectory (paths [i])) {ftpclient.makedirectory (paths [i]); ftpClient.changeworkingDirectory (paths [i]); }}} return true; } public static final void upload (map <string, object> servercfg, string filepathtouplload, string filestoredPath, string filestoreNAME) lève socketException, ioException {upload (servercfg, nouveau fichier (filePathTouplload), filestoredPath, fileStoredName); } public static final void upload (map <string, object> servercfg, filetouplload, string filestoredPath, string filestoreNNAM) lance socketException, ioException {if (filestoredPath! = null &&! "". equals (filestoredPath); } upload (servercfg, filetouplload, filestoredName); } public static final void upload (string filepathtouplload, string filestoredPath) lève socketException, ioException {upload (servercfg, filepathtouplload, filestoredPath, ""); } public static final void upload (fichier filetouplload, string filestoredPath) lève socketException, ioException {upload (servercfg, filetouplload, filestoredPath, ""); } public static String Values (String key) {String value = prop.getProperty (key); if (value! = null) {return value; } else {return null; }}} ftp.properties
#Server Address Server_ip = 192.168.1.1 #server port server_port = 21 #Account name user_name = userftp # mot de passe # mot de passe = Passwordftp
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.