Téléchargement, téléchargement et technologie de gestion des fichiers fonctionnels: 1. Utilisez XML comme information de stockage de la base de données (DOM4J, XPATH)
2. Télécharger et télécharger des formulaires Java
3. Décomposer le répertoire des fichiers (le répertoire de hachage est une méthode pour optimiser les performances du stockage de fichiers)
Besoin du package JAR:
Commons-fileupload-1.2.2.jar, commons-io-2.1.jar, dom4j-1.6.1.jar et jaxen-1.1-beta-6.jar
--------------------------------------------------------------------------------
Écrire index.jsp d'abord
<% @ Page Language = "Java" Import = "Java.util. *" Pageencoding = "UTF-8"%> <! DocType Html public "- // w3c // dtd html 4.01 transitional // en"> <html> mon album </h1> </ title> </ head> <hody> <h1> mon album </h1> <a <h1> <a <h1> <a <h1> <a-tare> </rea href = "jsps / upload.jsp"> Album de téléchargement </a> <a href = "servlets / showervlet"> Browse album </a> </body> </html>
upload.jsp est la page de téléchargement placée dans le répertoire JSPS
<% @ page Language = "Java" import = "java.util. *" Pageencoding = "utf-8"%> <! Doctype html public "- // w3c // dtd html 4.01 transitional // en"> <html> <form Action = "<% = request.getContextPath ()%> / servlets / uploadServlet" Method = "Post" EncType = "multipart / form-data"> file: <input type = "file" name = "file1" /> <br/> Description: <entrée type = "text" name = "DESC" /> <br/> <entrée = "soumettre" value = "upload" /> </ Form> </ body> </html>
Mettre Photos.xml dans le répertoire SRC
<? xml version = "1.0" Encoding = "UTF-8"?> </ Photos> </ Photos>
Écrire un objet de valeur photomodel
package cn.hncu.demain; classe publique Photomodel {ID de chaîne privée; STRING PRIVÉ REALNAME; chaîne privée ext; Dir de chaîne privée; DateTime de chaîne privée; chaîne privée ip; String privé desc; public String getID () {return id; } public void setid (String id) {this.id = id; } public String getRealName () {return realName; } public void setRealName (String realName) {this.realName = realName; } public String getext () {return ext; } public void sext (string ext) {this.ext = ext; } public String getDir () {return dir; } public void setDir (string dir) {this.dir = dir; } public String getDateTime () {return DateTime; } public void SetDateTime (String DateTime) {this.dateTime = DateTime; } public String getIP () {return ip; } public void setIP (String ip) {this.ip = ip; } public String getDesc () {return desc; } public void setDesc (String desc) {this.desc = desc; } @Override public String toString () {return "photomodel [id =" + id + ", realname =" + realName + ", ext =" + ext + ", dir =" + dir + ", datetime =" + datetime + ", ip =" + ip + ", desc =" + desc + "]";; }} Il existe deux types d'outils d'écriture:
Myutil (formatage de date, code de rupture du répertoire, code d'identification aléatoire)
package cn.hncu.utils; import java.text.simpledateformat; import java.util.date; import java.util.uuid; classe publique myutils {private myutils () {} private static SimpledateFormat format = new SimpledateFormat ("yyyyy année mm mois dd jour hh: mm: ss"); Public Static String getCurrentDateTime () {return format.format (new Date ()); } public static String getUUID () {UUID UUID = uUid.randomuuid (); String id = uUid.toString (). RempaceALL ("-", ""); Retour ID; } public static String getDir (String UUID) {String dir1 = Integer.tohexString (uUid.hashCode () & 0xf); String dir2 = Integer.tohexString ((uUid.hashcode () & 0xf0) >> 4); return dir1 + "/" + dir2; }}DOM4JFactory (opérations associées de DOM4J, obtenez un objet de document, opération de sauvegarde)
package cn.hncu.utils; import java.io.file; import java.io.fileInputStream; import java.io.filenotfoundException; import java.io.fileOutStream; import java.io.unsupportdedencodingException; import org.dom4j.Document; import org.Dom4j.DoCumentException; org.dom4j.io.outputformat; import org.dom4j.io.saxreader; import org.dom4j.io.xmlwriter; classe publique Dom4jfactory {document statique privé Dom = null; Path de chaîne statique privé; statique {try {saxReader sax = new saxReader (); // Apprenez à charger le chemin de la ressource sous le serveur (parce que nos ressources ont été publiées de MyEclipse au serveur Tomcat, donc elle est différente du projet Java pur d'origine) // Utilisez la classe actuelle pour trouver son chargeur de classe, puis utilisez le chargeur de classe pour obtenir le chemin de ressource Path de ressource = Dom4jfactory.class.getClassloader (). dom = sax.read (new FileInputStream (path)); } catch (exception e) {lancer une nouvelle RuntimeException (e.getMessage (), e); }} Document statique public GetDom () {return Dom; } public static booléen Save () {try {OutputFormat format = new outputformat (); format.SetEncoding ("UTF-8"); Xmlwriter w = new XMLWriter (new FileOutputStream (nouveau fichier (chemin)), format); W.Write (DOM); w.close (); Retour Vrai; } catch (exception e) {return false; }}}Écrivez Photodao à partir de la couche inférieure
Package cn.hncu.dao; import java.util.arraylist; import java.util.iterator; import java.util.list; import org.dom4j.document; import org.dom4j.element; import Cn.hncu.Demain.photomodel; Importer Cn.hncu.utils.Dom4jfactory; public {//dader booléen add (photomodel photo) {document dom = dom4jfactory.getdom (); Élément root = dom.getrootelement (); Élément ephoto = root.addelement ("photo"); ephoto.addattribute ("id", photo.getId ()); ephoto.addattribute ("realName", photo.getRealName ()); ephoto.addattribute ("dir", photo.getdir ()); ephoto.addAttribute ("ip", photo.getIp ()); ephoto.addAttribute ("DateTime", photo.GetDateTime ()); ephoto.addAttribute ("ext", photo.getExt ()); ephoto.addelement ("desc"). setText (Photo.getDesc ()); booléen boo = dom4jfactory.save (); retourner boo; } // Browse Public List <Motomodel> getall () {document Dom = dom4jfactory.getDom (); List <Motomodel> list = new ArrayList <Comodel> (); Élément root = dom.getrootelement (); Iterator <element> it = root.elementIterator (); while (it.hasnext ()) {photomodel photo = new photomodel (); Élément e = it.next (); Photo.SetId (e.AttributeValue ("id")); Photo.SetDateTime (e.AttributeValue ("DateTime")); Photo.setDir (e.AttributeValue ("dir")); Photo.SeText (E.AttributeValue ("ext")); Photo.setip (E.AttributeValue ("IP")); Photo.SetRealName (e.AttributeValue ("RealName")); Photo.setDesc (E.ElementText ("DESC")); list.add (photo); } Retour List; } public photomodel getSingleById (String id) {document Dom = dom4jfactory.getDom (); List <Motomodel> list = getall (); pour (Photomodel Photo: liste) {if (photo.getId (). equals (id)) {return Photo; }} return null; } public boolean del (String id) {document Dom = dom4jfactory.getDom (); Élément e = (élément) dom.selectsingLenode ("// photo [@id = '" + id.trim () + "']"); return e.getParent (). retirer (e); }} Écrivez quatre servlets à la fin
Téléchargement de téléchargement de téléchargement de servlet
package cn.hncu.servlets; importer java.io.file; import java.io.ioexception; import java.io.inputstream; import java.io.printwriter; import java.util.list; import javax.servlet.servletException; import javax.servlet.http.httplesvlet; import; javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; import org.apache.commons.fileupload.fileItem; import org.apache.commons.fileupload.fileUpLadexception; import org.apache.commons.fileupload.disk.diskfileItemfactory; import org.apache.commons.fileupload.servlet.servletfileupload; import org.apache.commons.io.fileutils; import Cn.hncu.photomodel; import; cn.hncu.utils.myutils; public class uploadServlet étend httpservlet {public void doget (httpservletRequest request, httpservletResponse réponse) lève ServletException, ioexception {réponse.SetContentType ("text / html; charset = utf-8"); Printwriter out = réponse.getWriter (); out.println ("<! doctype html public /" - // w3c // dtd html 4.01 transitional // en / ">"); out.println ("<html>"); out.println ("<adread> <itle> un servlet </Title> </A-head>"); out.println ("<porce>"); Out.println ("Get Téléchargement n'est pas pris en charge!"); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); } public void doPost (requête HttpServletRequest, réponse httpservletResponse) lève ServletException, ioException {réponse.setContentType ("text / html; charset = utf-8"); Printwriter out = réponse.getWriter (); String path = request.getServletContext (). GetRealPath ("/ photos"); DiskfileItemfactory factory = new DiskFileItemFactory (); factory.setRepository (nouveau fichier ("g: / a")); ServletFileUpload upload = new ServletFileUpload (Factory); upload.SetSizEMax (1024 * 1024 * 10); // maximum 10m upload.sethEnerEncoding ("utf-8"); // Utiliser pour définir le codage du nom de fichier, équivalent à: request.SetcharActerEncoding ("utf-8"); FileItem fi = null; essayez {list <FeleItem> list = upload.parsErequest (request); Photomodel Photo = Nouveau photomodel (); // Encapsulation de données --- 7 attributs sont requis booléan boo = false; InputStream dans = null; for (fileItem fi2: list) {fi = fi2; if (fi.isformField ()) {String desc = fi.getString ("utf-8"); Photo.setDesc (desc); // desc} else {in = fi.getInputStream (); String realName = fi.getName (); if (realName == null || realName.trim (). equals ("")) {out.print ("aucun fichier sélectionné!"); retour; } if (realName.Indexof ("//")! = - 1) {realName = realName.SubString (realName.LastIndexof ("//") + 1); } Photo.SetRealName (RealName); // Nom de fichier Real String Ext = realName.Substring (realName.LastIndexof (".")); Photo.SeText (ext); // 3 Photo.SetDateTime (myutils.getCurrentDateTime ()); // 4 Photo.SetID (myutils.getUuid ()); // 5 Photo.SetDir (MyUtils.getDir (Photo.getid ())); // 6 Photo.SetIp. base de données Photodao Dao = new Photodao (); boo = dao.add (photo); // Si les informations photo ci-dessus sont enregistrées avec succès, vous commencerez à recevoir le fichier image et à l'enregistrer sur le disque dur du serveur if (boo) {System.out.println (dao); path = path + "/" + photo.getdir (); Fichier dir = nouveau fichier (chemin); if (! dir.exists ()) {dir.mkdir (); } String filename = path + "/" + photo.getId () + photo.getExt (); FileUtils.copyInputStreamtoFile (dans, nouveau fichier (nom de fichier)); String strpath = request.getContextPath () + "/ servlets / showervlet"; out.print ("Uploaded réussi! <a href = '" + strpath + "'> Browse album </a>"); } else {out.print ("Upload a échoué!"); }} catch (fileUpLoAdException e) {throw new RuntimeException ("upload a échoué!"); ", e);} enfin {if (fi! = null) {fi.delete ();}} out.flush (); out.close ();}}Showervlet Le côté servlet des albums de navigation
package cn.hncu.servlets; import java.io.ioexception; import java.io.printwriter; import java.util.list; import javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.http.http.httpleservlet; import; javax.servlet.http.httpservletResponse; Importer cn.hncu.dao.photodao; import Cn.hncu.demain.photomodel; classe publique Showervlet étend httpleservlet {ioException si une erreur s'est produite publique Void Doget (httpleservest demande, httServlet IoException {doPost (request, réponse); } public void doPost (requête HttpServletRequest, réponse httpservletResponse) lève ServletException, ioException {réponse.setContentType ("text / html; charset = utf-8"); request.SetcharAtterencoding ("UTF-8"); Printwriter out = réponse.getWriter (); out.println ("<! doctype html public /" - // w3c // dtd html 4.01 transitional // en / ">"); out.println ("<html>"); out.println ("<adread> <itle> un servlet </Title> </A-head>"); out.println ("<porce>"); String Table = "<Table Border = '1' width = '100%'>" + "<Tr> <th> Nom de fichier </th> <th> Télécharger ip </th> <th> Téléchargez le temps </th> <th> Image </th> <th> Instructions </th> <th> Operation </ Th> </tr>"; Out.print (tableau); Photodao dao = new Photodao (); List <photomodel> list = dao.getall (); pour (photomodel p: list) {out.print ("<tr>"); out.println ("<td>" + p.getRealName () + "</td>"); out.println ("<td>" + p.getip () + "</td>"); out.println ("<td>" + p.getDateTime () + "</td>"); // la chaîne d'image de sortie PATH = request.getContextPath () + "/ Photos /" + p.getDir () + "/" + p.getId () + p.getExt (); out.println ("<td> <a href = '" + path + "'> <img src = '" + path + "' width = '200' height = '200'> </img> </a> </td>"); String op = "<a href = '" + request.getContextPath () + "/ servlets / delservlet? Id =" + p.getID () + "'> delete </a>"; out.println ("<td>" + p.getdescs () + "</td>"); op + = "<a href = '" + request.getContextPath () + "/ servlets / downservlet? id =" + p.getID () + "'> télécharger </a>"; out.println ("<td>" + op + "</td>"); out.print ("</tr>"); } out.println ("</pally>"); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); }}Code de serveur téléchargé par Downservlet
Package CN.hncu.servlets; import java.io.fileInputStream; import java.io.fileoutputStream; import java.io.ioexception; import java.io.inputStream; import java.io.outputstream; javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; {public void doGet (HttpServLetRequest Request, HttpServletResponse Response) lève ServletException, ioException {doPost (request, réponse); } public void doPost (requette httpServletRequest, réponse httpservletResponse) lève Servlexception, ioException {String id = request.getParAmètre ("id"); réponse.setContentType ("application / force-download"); Photomodel p = new Photodao (). GetSingleByid (id); if (p! = null) {String realName = p.getRealName (); realName = new String (realName.getBytes ("ISO8859-1"), "UTF-8"); Response.sethEader ("Content-Disposition", "Pixe; FileName = /" "+ RealName +" / ""); String relPath = getServletContext (). GetRealPath ("/ Photos /" + p.getDir () + "/" + p.getID () + p.getExt ()); InputStream dans = new FileInputStream (RelPath); OutputStream out = réponse.getOutputStream (); System.out.println (RelPath); octet buf [] = nouveau octet [1024]; int len = 0; while ((len = in.read (buf))! = - 1) {out.write (buf, 0, len); } out.close (); } else {réponse.setContentType ("text / html; charset = utf-8"); réponse.getwriter (). println ("Ce fichier a été supprimé!"); }}}Delservlet Delete Server
package cn.hncu.servlets; import java.io.file; import java.io.fileInputStream; import java.io.ioexception; import java.io.inputstream; import java.ivlet.ServleTream; javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; {public void doGet (HttpServLetRequest Request, HttpServletResponse Response) lève ServletException, ioException {doPost (request, réponse); } public void doPost (request httpServLetRequest, httpsservletResponse réponse) lève ServletException, ioException {request.SetcharAtterencoding ("utf-8"); Response.SetContentType ("Text / HTML; charSet = UTF-8"); Printwriter out = réponse.getWriter (); String id = request.getParameter ("id"); Photomodel p = new Photodao (). GetSingleByid (id); if (p! = null) {if (! p.getip (). equals (request.getReMoteadDr ())) {out.println ("vous n'avez pas la permission de le supprimer!"); retour; } // ※※※※ Les parties suivantes sont ajoutées à la classe suivante !!! // 1Delete les informations dans la base de données Photodao Dao = new Photodao (); booléen boo = dao.del (id); // 2Delete le fichier dans le disque dur du serveur if (boo) {string filename = "Photos /" + p.getDir () + "/" + p.getId () + p.getExt (); String pathFileName = getServletContext (). GetRealPath (filename); Fichier f = nouveau fichier (pathFileName); if (f.exists ()) {f.delete (); } String strpath = request.getContextPath () + "/ servlets / showervlet"; Out.println ("Photo Supprimer avec succès! <A href = '" + strpath + "'> Browse Album </a>"); } else {out.println ("Photo Delete a échoué!"); }} else {réponse.setContentType ("text / html; charset = utf-8"); réponse.getWriter (). println ("Ce fichier n'existe pas!"); }}}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.