La carga de archivos es muy común en las aplicaciones web. Ahora presentaré la carga de archivos según el servlet. Se puede ver la carga de archivo basada en Struts2:
Código lateral de la página:
<%@ page lenguaje = "java" import = "java.util.*" pageEncoding = "gbk"%> <! DocType html público "-// w3c // dtd html 4.01 transitional // en"> <html> <foad> <title> registro </titter> </ted> <body> <body> on_subMit () "Action =" RegissterServlet "método =" post "enctype =" multipart /form-data "> <input type =" text "name =" uname1 "id =" contraseña " /> <input type =" text "name =" uname2 "id =" uname2 " /> <input type =" contraseña "name =" contraseña "Id =" contraseña " /> <<put type de input type =" contraseña "name" name "name" name "name" name "name" name "name" name "name" name "name" name "name" name "name" name "name" "name" "name" id = "contraseña"/> <input type = "radio" valor = "macho" checked = "checked" name = "sex"/> masculino <input type = "radio" valor = "femenino" name = "sex"/> femenino <input type = "text" name = "correo electrónico" value = "" id = "login"/> <br/> <br/> <input type = "file" file = "file1" Id = "<"/> <> <> <> <input type "Type" name = "Subt" Value = "Complete Registration"/> </form> </body> </html>
Una cosa a tener en cuenta aquí es que el formulario de formulario cargado por el archivo debe ser enctype = "multipart/formy-data"; Aquí interactuamos directamente con el fondo sin interacción AJAX. Si necesita usar AJAX, puede ver: http://www.cnblogs.com/shenliang123/category/372520.html
Continuemos observando la implementación del código de Servlet:
paquete com.xidian.bbs.servlet; import java.io.ioException; import java.io.printwriter; import java.net.inetaddress; import java.sql.connection; import java.sql.resultset; import java.sql.statement; import javax.servlet.servletexception; import; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; import javax.servlet.jsp.jspFactory; import javax.servlet.jsp.pagextext; import; importar; import com.jspsmart.upload.*; import com.xidian.bbs.bean.bean; import com.xidian.bbs.bean.registerBean; import com.xidian.bbs.util.dbaccess; import com.xidian.bbs.util.ipestamp; @Suppresswarnings ("serial) Doget vacío protegido (httpservletRequest, respuesta httpservletResponse) arroja servletException, ioexception {respuesta.setContentType ("text/html"); respuesta.setcharacteriCoding ("gbk"); request.setcharacterEncoding ("GBK"); SmartUpload Smart = new SmartUpload (); Prueba {// pageContext es un objeto incorporado de JSP. No se puede usar directamente en Servlet, y se necesita algo de procesamiento. JspFactory _jspxFactory = null; PageContext pageContext = null; _jspxFactory = jspFactory.getDefaultFactory (); pageContext = _jspxfactory.getPageContext (this, solicitud, respuesta, "", verdadero, 8192, true); Smart.initialize (PageContext); // Inicializar la operación de carga Smart.upload (); Iptimestamp its = new Iptimestamp (inetaddress.getLocalHost (). Gethostaddress ()); // request.getRemoteaddr () obtiene la dirección IP del usuario // system.out.println ("La IP se obtiene"+inetaddress.getLocalhost (). Gethostaddress ()); // Si desea implementar la carga por lotes de archivos, solo necesita usar un bucle for y cambiar 0 en getFile (0) a i a string ext = smart.getFiles (). GetFile (0) .getFileExt (); // Esta es la extensión para obtener el archivo, getFile (0) es el único archivo de archivo de carga = its.getiptimerand ()+"." "Ext; //System.out.println(" El nombre del archivo obtenido es "+nombre de archivo); //this.getServletContext().getRealpath("/ ") Para obtener el directorio Tomcat, se coloca en la carpeta de carga. java.io.file.separator es una operación segura // string realpath = ""; //this.getServletContext(). String realPath = "HeadUpload/"+FileName+""; // // Dado que el formulario anterior se ha encapsulado, no podemos simplemente usar request.getParameter () para obtener la cadena de parámetros de formulario uname1 = smart.getRequest (). GetParameter ("uname1"); // apodo de string upass1 = smart.getRequest (). GetParameter ("contraseña1"); String Sex = Smart.getRequest (). GetParameter ("Sex"); Cadena uname2 = smart.getRequest (). GetParameter ("uname2"); // UserName String Correo electrónico = Smart.getRequest (). GetParameter ("Correo electrónico"); PrintWriter out = Response.getWriter (); // Las siguientes son operaciones de capa de persistencia, omitidas. . . . . . . . . . } protegido void dopost (httpservletRequest solicitud, respuesta httpservletreSponse) lanza ServletException, ioexception {doget (solicitud, respuesta); }}La clase IP+TimeStamp Iptimestamp utilizada anteriormente renombra el archivo:
Al cargar archivos y otras operaciones, para evitar que los nombres de los archivos sean conflictivos, realizaremos operaciones de cambio de nombre. Aquí hay un nombre que implementa las marcas de tiempo IP+:
Acabo de subir el código, no hay nada que decir, la implementación es bastante simple, pero práctica
paquete com.xidian.bbs.util; import java.text.simpledateFormat; import java.util.date; import java.util.random; clase pública ipptimestamp {private SimpleDateFormat Sim = null; // Se usa para obtener el tiempo IP de cadena privada = null; public Iptimestamp () {} public IpTimestamp (String IP) {this.ip = ip; } public String getIPTiMerand () {StringBuffer sbf = new StringBuffer (); if (this.ip! = null) {string a [] = this.ip.split ("//."); // divide la dirección IP de acuerdo con el punto, pero el punto debe escaparse para (int i = 0; i <a.length; i ++) {sbf.append (this.addzero (a [i], 3)); // Llamando al método de complemento cero, y cada IP con menos de tres dígitos se complementa automáticamente a tres dígitos} sbf.append (this.gettimestamp ()); // use esto para llamar al método externo aleatorio aleatorio = new Random (); // Creación de un número aleatorio para (int i = 0; i <3; i ++) {// creando un número aleatorio de tres dígitos sbf.append (random.nextint (10)); // Cada número aleatorio no excede 10}} return sbf.ToString (); } @Suppleswarnings ("sin usar") cadena privada getDate () {// con respecto a la fecha y la hora this.sim = new SimpleDateFormat ("yyyyy-mm-dd hh: mm: ss.sss"); devolver esto.sim.format (new Date ()); } private String getTimestamp () {// return timestamp this.sim = new SimpleDateFormat ("yyyymmddhhmmsssss"); devolver esto.sim.format (new Date ()); } private String addzero (string str, int len) {// El método automático de complemento cero, los parámetros son la cadena y longitud especificadas StringBuffer S = new StringBuffer (); S.Append (STR); while (s.length () <len) {s.insert (0, "0"); // Operación de complemento cero en la posición cero} return s.toString (); } // prueba public static void main (string [] ary) {iptImestamp ipTImestamp = new Iptimestamp ("172.168.3.222"); // Llamando al constructor con parámetros System.out.println (iptimestamp.getiptimerand ()); }}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.