Tecnología de carga, descarga y administración de archivos funcionales: 1. Use XML como información de almacenamiento de bases de datos (DOM4J, XPATH)
2. Subir y descargar los formularios Java
3. Desglosando el directorio de archivos (el directorio hash es un método para optimizar el rendimiento del almacenamiento de archivos)
Necesito paquete de jar:
Commons-FileUpload-1.2.2.Jar, Commons-io-2.1.Jar, DOM4J-1.6.1.Jar y Jaxen-1.1-Beta-6.Jar
--------------------------------------------------------------------------------
Escribir index.jsp primero
<%@ page lenguaje = "java" import = "java.util.*" PageEncoding = "utf-8"%> <! DocType html público "-// w3c // dtd html 4.01 transitional // en"> <html> <fead> <title> Sistema de gestión de álbum </title> </Ela> </Ela> <hbod> <h1> mi álbum </h1> href = "jsps/upload.jsp"> cargar álbum </a> <a href = "servlets/showservlet"> navegar álbum </a> </body> </html>
upload.jsp es la página de descarga colocada en el directorio JSPS
<%@ page idioma = "java" import = "java.util.*" pageEncoding = "utf-8"%> <! DocType html público "-// w3c // dtd html 4.01 transitional // en"> <html> <fead> <bead> <body> <hiR1> subiendo </h1> Action = "<%= request.getContextPath ()%>/servlets/uploadServlet" método = "post" enctype = "multipart/form-data"> archivo: <input type = "file" name = "file1"/> <br/> descripción: <input type = "text" name = "desc"/> <br/> <input type = "subsit" value = "upload" <<borm " </body> </html>
Poner fotos.xml en el directorio SRC
<? xml versión = "1.0" encoding = "utf-8"?> <totos> </fotos>
Valor de escritura Fotomodelo de objeto
paquete cn.hncu.demain; public class Photomodel {private String id; cadena privada RealName; cadena privada ext; Dir de cadena privada; cadena privada dataTime; IP de cadena privada; Cadena privada descifrar; public String getId () {return id; } public void setid (ID de cadena) {this.id = id; } public String getRealName () {return realName; } public void setRealName (string realName) {this.realName = RealName; } public String getext () {return ext; } public void setext (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 = descr; } @Override public string toString () {return "Photomodel [id =" + id + ", realName =" + realName + ", ext =" + ext + ", dir =" + dir + ", datTime =" + datTime + ", ip =" + ip + ", desc =" + desc + "]"; }} Hay dos tipos de herramientas de escritura:
MyUtil (formato de fecha, código de ruptura del directorio, código de identificación aleatorio)
package cn.hncu.utils;import java.text.SimpleDateFormat;import java.util.Date;import java.util.UUID;public class MyUtils { private MyUtils() { } private static SimpleDateFormat format=new SimpleDateFormat("yyyyy year MM month dd day hh:mm:ss"); public static String getCurrentDateTime () {return format.format (new Date ()); } public static string getuuid () {uuid uuid = uuid.randomuuid (); String id = uuid.ToString (). ReplaceAll ("-", ""); ID de retorno; } public static string getDir (String uuid) {String dir1 = integer.tohexString (uuid.hashcode () & 0xf); String dir2 = integer.toHexString ((uuid.hashcode () y 0xf0) >> 4); return dir1+"/"+dir2; }}DOM4JFactory (Operaciones relacionadas de DOM4J, Obtener objeto de documento, Operación de guardado)
paquete cn.hncu.utils; import java.io.file; import java.io.fileInputStream; import java.io.filenotfoundException; import java.io.fileOutputStream; import java.io.unsupportedenCodingingException; importar org.dom4j.document; import org.dom4j.io.outputformat; import org.dom4j.io.saxreader; import org.dom4j.io.xmlwriter; public class DOM4JFactory {Documento estático privado dom = null; ruta de cadena estática privada; static {try {saxreader sax = new saxreader (); // Aprenda a cargar la ruta de recursos en el servidor (porque nuestros recursos se han publicado desde MyEClipse al servidor TomCat, por lo que es diferente del proyecto Java Pure original) // Use la clase actual para encontrar su cargador de clase, y luego use el cargador de clases para obtener la ruta de la ruta = DOM4JFactory.class.getClassLoader (). dom = sax.read (nuevo FileInputStream (ruta)); } catch (Exception e) {Throw New RuntimeException (e.getMessage (), e); }} documento estático público getDom () {return dom; } public static boolean save () {try {outputFormat format = new outputFormat (); format.setEncoding ("UTF-8"); XMLWriter w = new XMLWriter (nuevo FileOutputStream (nuevo archivo (ruta)), formato); w.write (DOM); w.close (); devolver verdadero; } capt (excepción e) {return false; }}}Escribe Photodao desde la capa inferior
paquete cn.hncu.dao; import java.util.arrayList; import java.util.iterator; import java.util.list; importar org.dom4j.document; import og.dom4j.element; import cn.hncu.demain.photomodel; import cn.hncu.utils.s4j; boolean add (Photomodel Photo) {Document DOM = DOM4JFactory.getDom (); Elemento root = dom.getrooTelement (); Elemento efoto = root.addelement ("foto"); efoto.addattribute ("id", foto.getID ()); efoto.addattribute ("RealName", Photo.getRealName ()); efoto.addattribute ("dir", foto.getDir ()); efoto.addattribute ("ip", foto.getip ()); efoto.addattribute ("DateTime", Photo.getDateTime ()); efoto.addattribute ("ext", foto.getext ()); efoto.addelement ("Desc"). Settext (Photo.getDesc ()); boolean boo = dom4jfactory.save (); regresar boo; } // Explorar la lista pública <Photomodel> getAll () {document DOM = DOM4JFactory.getDom (); List <Photomodel> list = new ArrayList <Photomodel> (); Elemento root = dom.getrooTelement (); Iterador <ememem> it = root.ElementIterator (); while (it.hasnext ()) {Photomodel Photo = new Photomodel (); Elemento 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 (foto); } Lista de retorno; } public Photomodel getSingleById (ID de cadena) {documento dom = dom4jfactory.getdom (); List <Photomodel> list = getAll (); for (PhotoModel Photo: List) {if (Photo.GetId (). Equals (id)) {return Photo; }} return null; } public boolean del (ID de cadena) {documento dom = dom4jfactory.getdom (); Elemento e = (elemento) dom.selectsinglenode ("// photo [@id = '"+id.trim ()+"']"); return E.getParent (). Eliminar (e); }} Escribe cuatro servlets al final
Código de servlet de carga de SuboLloadServlet
paquete cn.hncu.servlets; import 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.htpservlet; import; importar; importar; importar; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpServletResponse; importar org.apache.commons.fileUpload.fileitem; import org.apache.commons.fileupload.fileuploadexception; import org.apache.commons.fileupload.disk.diskfileitemFactory; import org.apache.commons.fileUpload.servlet.servletFileUpload; importar org.apache.commons.io.fileutils; import cn.hncu.daoo.photodao; import cn.hncu cn.hncu.utils.myutils; public class uploadServlet extiende httpservlet {public void doget (httpservletRequest request, httpServletResponse respuesta) lanza servletException, ioexception {respuesta.setContentType ("text/html; charset = utf-8"); PrintWriter out = Response.getWriter (); out.println ("<! DocType html public/"-// w3c // dtd html 4.01 transitional // en/">"); out.println ("<html>"); out.println ("<Ethead> <title> un servlet </title> </head>"); out.println ("<body>"); out.println ("Obtener la carga no es compatible!"); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); } public void dopost (httpservletRequest solicitud, respuesta httpservletreSponse) lanza ServletException, ioexception {Response.SetContentType ("Text/Html; Charset = UTF-8"); PrintWriter out = Response.getWriter (); String ruta = request.getServletContext (). GetRealPath ("/Photos"); DiskFileItemFactory fábrica = new DiskFileItemFactory (); factory.setRepository (nuevo archivo ("g:/a")); ServletFileUpload upload = new ServLetFileUpload (fábrica); upload.setsizeMax (1024*1024*10); // máximo 10m upload.setheaderEncoding ("utf-8"); // Use para establecer la codificación del nombre del archivo, equivalente a: request.setcharacterEcterEncoding ("UTF-8"); FileItem fi = null; intente {list <StilEitem> list = upload.parserequest (request); Photomodel Photo = new Photomodel (); // Encapsulación de datos --- 7 atributos se requieren boolean boo = false; InputStream in = null; for (fileItem fi2: list) {fi = fi2; if (fi.isformfield ()) {string desc = fi.getString ("utf-8"); Photo.setDesc (desc); // descry} else {in = fi.getInputStream (); Cadena realName = fi.getName (); if (realName == null || realName.trim (). Equals ("")) {out.print ("¡No hay archivo seleccionado!"); devolver; } if (realName.Indexof ("//")! =-1) {RealName = RealName.Substring (RealName.LastIndexOf ("//")+1); } Photo.SetRealName (RealName); // Nombre de archivo real Ext = RealName.Substring (RealName.LastIndexOf (".")); Photo.setext (ext); // 3 Photo.SetDateTime (myUutils.getCurrentDateTime ()); // 4 Photo.SetId (myUtils.getuuid ()); // 5 Photo.SetDir (myUtils.getDir (Photo.getId ())); // 6.setip (request.getRemoteaddr ()); // 7} base de datos Photodao dao = new Photodao (); boo = dao.add (foto); // Si la información de la foto de arriba se guarda correctamente, comenzará a recibir el archivo de imagen y guardarálo en el disco duro del servidor if (boo) {System.out.println (DAO); ruta = ruta+"/"+Photo.getDir (); Archivo dir = nuevo archivo (ruta); if (! dir.exists ()) {dir.mkdir (); } String FileName = Path+"/"+Photo.getID ()+Photo.Getext (); FileUtils.CopyInputStreamToFile (in, nuevo archivo (nombre de archivo)); String strpath = request.getContextPath ()+"/servlets/showservlet"; out.print ("¡Subido con éxito! <a href = '"+strpath+"'> álbum de navegación </a>"); } else {out.print ("¡cargar fallido!"); }} Catch (FileUploadException e) {Throw New RuntimeException ("¡Cargue fallado!"); ", e);} finalmente {if (fi! = null) {fi.delete ();}} out.flush (); out.close ();}}ShoServlet el lado de servlet de los álbumes de navegación
paquete 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.httservletRequest; javax.servlet.http.httpServletResponse; import cn.hncu.dao.photodao; import cn.hncu.demain.photomodel; public class showServlet extiende httpservlet {ioexception si un error ocurrió publicólo IoException {dopost (solicitud, respuesta); } public void dopost (httpservletRequest solicitud, respuesta httpservletreSponse) lanza ServletException, ioexception {Response.SetContentType ("Text/Html; Charset = UTF-8"); request.setcharacterEncoding ("UTF-8"); PrintWriter out = Response.getWriter (); out.println ("<! DocType html public/"-// w3c // dtd html 4.01 transitional // en/">"); out.println ("<html>"); out.println ("<Ethead> <title> un servlet </title> </head>"); out.println ("<body>"); String table = "<table border = '1' width = '100%'>"+ "<tr> <th> nombre de archivo </th> <th> cargar IP </th> <th> Tiempo de carga </th> <th> Image </th> <th> Instrucciones </th> <th> Operación </th> </tr>"; out.print (tabla); Photodao dao = new Photodao (); List <Photomodel> list = dao.getall (); for (Photomodel p: list) {out.print ("<tr>"); out.println ("<td>"+p.getRealName ()+"</td>"); out.println ("<td>"+p.getip ()+"</td>"); out.println ("<td>"+p.getDateTime ()+"</td>"); // String String String Path = request.getContextPath ()+"/Photos/"+p.getDir ()+"/"+p.getid ()+p.getext (); out.println ("<td> <a href = '"+ruta+"'> <img src = '"+ruta+"' width = '200' height = '200'> </ img> </a> </td>"); String op = "<a href = '"+request.getContextPath ()+"/servlets/delservlet? Id ="+p.getid ()+"'> delete </a>"; out.println ("<td>"+p.getDesc ()+"</td>"); op+= "<a href = '"+request.getContextPath ()+"/servlets/downservlet? id ="+p.getid ()+"'> descargar </a>"; out.println ("<Td>"+op+"</td>"); out.print ("</tr>"); } out.println ("</table>"); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); }}Código de servidor descargado por Downservlet
paquete cn.hncu.servlets; import java.io.fileInputStream; import java.io.fileOutputStream; import java.io.ioexception; import java.io.inputstream; import java.io.outputputStream; import java.io.io javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; import cn.hncu.dao.photodao; import cn.hncu.demain {public void doget (httpservletRequest solicitud, respuesta httpservletResponse) lanza ServletException, ioexception {dopost (solicitud, respuesta); } public void dopost (httpservletRequest solicitud, respuesta httpservletResponse) lanza ServletException, ioexception {string id = request.getParameter ("id"); respuesta.setContentType ("Application/Force-Download"); Photomodel p = new Photodao (). GetSingleyById (id); if (p! = null) {string realName = p.getRealName (); RealName = new String (RealName.getBytes ("ISO8859-1"), "UTF-8"); respuesta.setheader ("Disposición de contenido", "Adjunto; FileName =/" "+RealName+"/""); String relpath = getServletContext (). GetRealPath ("/Photos/"+p.getDir ()+"/"+p.getid ()+p.getext ()); InputStream in = new FileInputStream (RelPath); OutputStream out = Response.getOutputStream (); System.out.println (Relpath); byte buf [] = nuevo byte [1024]; int len = 0; while ((len = in.read (buf))! =-1) {out.write (buf, 0, len); } out.close (); } else {Response.SetContentType ("Text/Html; Charset = UTF-8"); Response.getWriter (). println ("Este archivo se ha eliminado!"); }}}Servidor Delservlet Eliminar
paquete cn.hncu.servlets; import java.io.file; import java.io.fileinputstream; import java.io.ioexception; import java.io.inputstream; import java.io.outputstream; import java.io.printwriter; import javax.servlet.servletexception; importar; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; import cn.hncu.dao.photodao; import cn.hncu.demain.photomodomodomod; {public void doget (httpservletRequest solicitud, respuesta httpservletResponse) lanza ServletException, ioexception {dopost (solicitud, respuesta); } public void dopost (httpservletRequest solicitud, respuesta httpservletResponse) lanza ServletException, ioexception {request.setcharacterEncoding ("UTF-8"); respuesta.setContentType ("text/html; charset = utf-8"); PrintWriter out = Response.getWriter (); String id = request.getParameter ("id"); Photomodel p = new Photodao (). GetSingleyById (id); if (p! = null) {if (! P.getip (). Equals (request.getRemoteaddr ())) {out.println ("¡No tienes permiso para eliminarlo!"); devolver; } // ※※※※ ¡Las siguientes partes se agregan a la siguiente clase! // 1Delete la información en la base de datos Photodao dao = new Photodao (); boolean boo = dao.del (id); // 2Delete el archivo en el disco duro del servidor if (boo) {string filename = "Photos/"+p.getDir ()+"/"+p.getID ()+p.getext (); String pathFileName = getServletContext (). GetRealPath (nombre de archivo); Archivo F = nuevo archivo (PathFileName); if (f.exists ()) {f.delete (); } String strpath = request.getContextPath ()+"/servlets/showservlet"; out.println ("Photo Elimine con éxito! <a href = '"+strpath+"'> navegar álbum </a>"); } else {out.println ("Photo Eliminar fallado!"); }} else {respuesta.setContentType ("text/html; charset = utf-8"); Response.getWriter (). println ("Este archivo no existe!"); }}}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.