Cet article compare deux exemples de téléchargement de fichiers pour aider tout le monde à mieux apprendre la fonction de téléchargement de fichiers Java. Le contenu spécifique est le suivant
1. Code de téléchargement Java Pièces
@ControllerPublic Class uploadFile étend BaseJsonController {/ ** * Pièce de pièce Upload * * @Param Request * @param CreativeFile * @Param Response * @return * / @RequestMapping (value = "/upload/uploadfile.json") public Void uploadfile (HTTPServlequest request, HTTSERSERSPERSPONSE Assurez-vous la sécurité du serveur, le fichier téléchargé doit être placé dans un répertoire qui ne peut pas être directement accessible par le monde extérieur, comme dans le répertoire Web. * 2. Pour empêcher l'écrasement des fichiers, un nom de fichier unique doit être généré pour télécharger le fichier. * 3. Pour empêcher trop de fichiers d'apparaître sous un répertoire, vous devez utiliser l'algorithme de hachage pour briser le stockage. * 4. La valeur maximale des fichiers téléchargés doit être limitée. * 5. Pour limiter le type de fichiers téléchargés, lors de la réception du nom de fichier téléchargé, déterminez si le nom du suffixe est légal. * / // Obtenez le répertoire SAVE Fichier téléchargé, stockez le fichier téléchargé dans le répertoire Web-Inf et n'autorise pas l'accès direct depuis le monde extérieur pour garantir la sécurité des fichiers téléchargés SavePath = request.getSession (). GetServletContext (). GetRealPath ("/ web-inf / upload"); // Le répertoire de sauvegarde du fichier temporaire généré lors de la chaîne de téléchargement temppath = request.getSession (). GetServletContext (). GetRealPath ("/ web-inf / temp"); Fichier tmpfile = nouveau fichier (TEMPPATH); if (! tmpfile.exists ()) {// Créez un répertoire temporaire tmpfile.mkDirs (); } // Le message invite JSONArray arr = new JSONArray (); Map <string, objet> map = null; InputStream dans = null; FileoutputStream out = null; Essayez {// Utilisez le composant de téléchargement de fichiers Apache pour gérer les étapes de téléchargement de fichiers: // 1. Créez une usine DiskFileItemFactory DiskFileItemFactory Factory = new DiskFileItemFactory (); // Réglez la taille du tampon de l'usine. Lorsque la taille du fichier téléchargé dépasse la taille du tampon, un fichier temporaire sera généré et stocké dans le répertoire temporaire spécifié. Factory.SetSizethReshold (1024 * 100); // Réglez la taille du tampon à 100KB. Si elle n'est pas spécifiée, la taille du tampon est de 10 Ko par défaut. // Définissez le répertoire de stockage du fichier temporaire généré lors du téléchargement factory.setRepository (tmpFile); // 2. Créer un fichier Téléchargement PARSER ServletFileUpload upload = new ServletFileUpload (Factory); // supert le fichier upload progress upload.setProgressListener (new ProgressListener () {public void Update (long pbytesRead, long pcontentLength, int arg2) {System.out.println ("File size is:" + pcontentLength + ", actuellement traité:" + pBytesRead);}}); // Résolvez le téléchargement chinois brouillé.sethEnerencoding ("UTF-8"); // 3. Déterminez si les données soumises sont les données du formulaire de téléchargement if (! ServletFileUpload.ismulTipartContent (request)) {// Obtenez des données renvoyant en fonction de la manière traditionnelle; } // Définissez la taille maximale du fichier unique téléchargé, qui est actuellement défini sur 1024 * 1024 octets, c'est-à-dire 20 Mo upload.setFileSizEMAX (1024 * 1024 * 20); // Définissez la valeur maximale du nombre total de fichiers téléchargés. La valeur maximale = la somme des tailles maximales de plusieurs fichiers téléchargés en même temps. Il est actuellement défini sur 40 Mo upload.SetSizEMax (1024 * 1024 * 40); // 4. Utilisez l'analyseur ServletFileUpload pour analyser les données téléchargées. Le résultat de l'analyse renvoie une collection List <FichierItem>. Chaque fichieritem correspond à l'élément d'entrée d'un formulaire @SuppressWarnings ("Unchecked") List <FequeItem> list = upload.parseRequest (request); pour (FileItem Item: list) {// Si les données des éléments d'entrée ordinaires sont encapsulées dans le fichieritem if (item.isformField ()) {String name = item.getFieldName (); // Résoudre le problème chinois brouillé des données des éléments d'entrée ordinaires Valeur de chaîne = item.getString ("UTF-8"); // Value = new String (value.getBytes ("ISO8859-1"), "UTF-8"); System.out.println (nom + "=" + valeur); } else {// Si l'élément de fichier est encapsulé dans le fichier téléchargé // Obtenez le nom de fichier téléchargé, String filename = item.getName (); if (filename == null || filename.trim (). equals ("")) {continuant; } // Remarque: Les noms de fichiers soumis par différents navigateurs sont différents. Certains navigateurs soumettent des noms de fichiers avec des chemins, tels que: c: /a/b/1.txt, tandis que certains ne sont que des noms de fichiers simples, tels que: 1.txt // traitez la partie Chemin du nom de fichier du fichier obtenu téléchargé, seule la pièce de nom de fichier est conservée filename = filename.substring (filename.lastIndexof ("//") + 1); // Obtenez l'extension de la chaîne de fichiers téléchargée fileExtName = filename.substring (filename.lastIndexof (".") + 1); // Si vous devez limiter le type de fichier téléchargé, vous pouvez utiliser l'extension de fichier pour déterminer si le type de fichier téléchargé est légal si (stringUtils.equals (fileExtName, "rar") || stringUtils.equals (fileExtName, "zip")) {throw new bizexception ("", "les fichiers compressés à télécharger sont prohibits!"); } / *************** / // Obtenez le flux d'entrée du fichier téléchargé dans l'élément = item.getInputStream (); / *****. // Obtenez la chaîne de répertoire de fichier SAVE REALSAVEPATH = MakePath (SaveFileName, SavePath); // Créer un flux de sortie de fichier out = new FileOutputStream (realsAvePath + "//" + SaveFileName); // Créer un tampon d'octet de tampon [] = nouveau octet [1024]; // L'identification de la lecture des données dans le flux d'entrée est INT LEN = 0; // La boucle lit le flux d'entrée dans le tampon, (len = in.read (tampon))> 0 signifie qu'il y a encore des données dans while ((len = in.read (tampon))> 0) {// Utilisez le flux de sortie FileOutputStream pour écrire les données de tampon dans le répertoire spécifié (SavePath + "//" + filen nom) out.write (tampon, 0, Len); } // Fermez le flux d'entrée dans.close (); // Fermez le flux de sortie Out.close (); // Supprimer le fichier temporaire généré lors du traitement du fichier téléchargement item.delete (); map = new HashMap <String, objet> (); map.put ("SaveFileName", SaveFileName); map.put ("realsavepath", realsavepath); arr.add (carte); }} returnSucCessJSON ("uploadBase.FileSizeliteXeateDedexception e) {e.printStackTrace (); returnfailjson (e.getMessage ()," un seul fichier dépasse la valeur maximale !!! ", réponse);} catch (fileuploadbase.sizelitexedException e) {E.PrintStackTrace ();); returnfailjson (e.getMessage (), "La taille totale du fichier téléchargé dépasse la limite maximale!!", Réponse); in.close (); @return UUID + "_" + Le nom d'origine du fichier * / private String MakeFileName (String FileName) {//2.jpg // Pour empêcher l'écrasement du fichier, un nom de fichier unique doit être généré pour télécharger le fichier return.randomuuid (). toString () + "_" + filename; } / ** * Pour empêcher que trop de fichiers apparaissent dans un répertoire, vous devez utiliser l'algorithme de hachage pour rompre le stockage * @Method: MakePath * @description: * @anthor: xuwentao * * @param nom de fichier de nom de fichier, générer un répertoire de stockage en fonction du nom de fichier * @Param SavePath File Stange Path * @rernrat SavePath) {// Obtenez la valeur HashCode du nom du fichier, et ce que vous obtenez est l'adresse du nom de fichier d'objet String dans la mémoire int hashcode = filename.hashcode (); int dir1 = hashcode & 0xf; // 0--15 int dir2 = (hashcode & 0xf0) >> 4; // 0-15 // Construire une nouvelle chaîne de répertoire de sauvegarde Dir = SavePath + "//" + dir1 + "//" + dir2; // Téléchargez / 2/3 Upload / 3/5 // Le fichier peut représenter les fichiers et les répertoires fichier fichier = nouveau fichier (dir); // Si le répertoire n'existe pas si (! File.exists ()) {// Créez le répertoire file.mkDirs (); } return dir; }}2. Java Téléchargez le code de CV
/ ** * Téléchargez le CV * Création à 1 fichier Échec 2-Exception 3-téléchargement Échec 4-fichier non obtenu 5 fichiers non supprimé 6-Sépréteur de téléchargement, Excel, PPT, FIDES PDF * / / * PATH Séparateur: Utilisé dans Adaptive Operating System * / Private Static String File_SeParator = System.GetProperties () .getProperty ("File.Searator"); / ** * Fichier de téléchargement * * @param fileIo * @param oldContractUrl * @param request * @return return Fichier Adresse (adresse relative, adresse non absolute) * / @Override public String upload (multipartFile FileIo, OldContractUrl, httpservletRetest) {String uploadurl = request.getSession (). // supprimer les fichiers et les dossiers if (oldContractUrl! = Null) {String oldDirectory = oldContractUrl.Substring (5, oldContractUrl.LastIndexof (file_separator)); Fichier file = nouveau fichier (uploadurl + olddirectory); Boolean Flag = DeleteDir (fichier); if (! Flag) {logger.error ("l'ancien délétion du fichier a échoué"); retourner "5"; }} // Télécharger un nouveau fichier de curriculum vitae Long Now = System.CurrentTimemillis (); uploadUrl = uploadurl + file_separator + maintenant + file_separator; String remenmeName = ""; if (! fileIo.isempty ()) {resumename = stringUtils.deleTewHitespace (fileIo.getOriginalFileName ()); // juge file suffixe / * string suffix = remenmeName.substring (resumename.lastIndexof ("."), Resumename.length ()) .tolowercase (); if (! ". doc" .equals (suffixe) &&! ". docx" .equals (suffixe) &&! ". xlsx" .equals (suffixe) &&! ". xlsx" .equals (suffixe) &&! ". ppt" .equals (suffix) &&! ",. pptx",. Logger.Error ("Not Word, Excel, PPT, Fichiers PDF"); retourner "6"; } * /} else {logger.error ("fichier non obtenu"); retourner "4"; } Fichier dir = nouveau fichier (uploadurl); if (! dir.exists ()) {dir.mkDirs (); } Fichier TargetFile = nouveau fichier (uploadUrl + remeMename); if (! TargetFile.exists ()) {try {cibleFile.CreateEwFile (); } catch (ioException e) {logger.error ("La création de fichiers a échoué", e); retourner "1"; }} essayez {fileIo.transferto (TargetFile); } catch (illégalStateException e) {logger.error ("exception de phrase", e); retourner "2"; } catch (ioException e) {logger.error ("téléchargement échoué", e); retourner "3"; } return file_separator + "files" + file_separator + maintenant + file_separator + remenmeName; } / ** * Supprimer récursivement tous les fichiers du répertoire et tous les fichiers dans les sous-répertoires * @param dir le répertoire de fichiers à supprimer * @return booléen renvoie "true" si toutes les suppressions ont réussi. * Si une suppression échoue, la méthode cesse d'essayer de * supprimer et renvoie "false". * / public boolean DeleteDir (fichier dir) {if (dir.isdirectory ()) {string [] enfants = dir.list (); // Supprimer récursivement les sous-répertoires dans le répertoire pour (int i = 0; i <children.length; i ++) {booléen Success = DeleteDir (nouveau fichier (dir, enfants [i])); if (! Success) {return false; }}} // Le répertoire est vide pour le moment, vous pouvez supprimer return dir.delete (); }Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et à maîtriser les compétences de téléchargement des fichiers Java.