O upload de arquivo é muito comum em aplicativos da Web. Agora vou introduzir o upload de arquivos com base no servlet. O upload de arquivo com base no STRUTS2 pode ser visualizado:
Código lateral da página:
<%@ página linguagem = "java" import = "java.util.*" PageEncoding = "gbk"%> <! On_subMit () "Action =" RegisterServlet "Method =" Post "Enctype =" Multipart /Form-Data "> <Input Type =" Text "name =" uname1 "id =" senha " /> <input type =" text "name =" uname2 "od =" uname2 " /> <input type =" name "" "=" name "=" "name" "ida" /"uname2" /> <input = "name" "" = "=" name "" "; id = "senha"/> <input type = "radio" value = "masculino" checked = "checked" name = "sexo"/> masculino <input type = "radio" value = "feminino" name = "sexo"/> feminino <input type = "text" name = "email" "" "idi" "/" file "/" filtro "/" filtro "/" filtro "" filtro "/" filtro ""/"FILE"/"FILE"/"FILE"/"FILE"/"FILE" "/" FILE "/" FILE ""/"FILE"/"FILE" 1 "/" FILE "/" FILE "1" <br/"" type = "submeter" name = "submeter" value = "Registro completo"/> </morm> </body> </html>
Uma coisa a observar aqui é que o formulário enviado pelo arquivo deve ser ENCTYPE = "Multipart/Form-Data"; Aqui, interagimos diretamente com o plano de fundo sem a interação Ajax. Se você precisar usar ajax, pode ver: http://www.cnblogs.com/shenliang123/category/372520.html
Vamos continuar analisando a implementação do código do servlet:
pacote com.xidian.bbs.servlet; importar java.io.ioException; importar java.io.printwriter; importar java.net.inetaddress; importar java.sql.connection; importação java.sql.resultset; import java.Sql.Xeption; importação; javax.servlet.http.httpServlet; importar javax.servlet.http.httpServletReQuest; importar javax.servlet.http.httpServletResponse; import javax.servat.jsp.nSpFactory; import javax.serSponse; com.jspsmart.upload. Void Doget (solicitação httpServletRequest, resposta httpServletResponse) lança servletexception, ioexception {Response.setContentType ("text/html"); Response.Setcharacterencoding ("GBK"); request.Setcharacterencoding ("GBK"); SmartUpload Smart = new SmartUpload (); tente {// PageContext é um objeto interno do JSP. Não pode ser usado diretamente no servlet, e é necessário algum processamento. JspFactory _jspxFactory = null; PageContext pageContext = null; _jspxFactory = jspFactory.getDefaultFactory (); pageContext = _jspxFactory.getPageContext (isto, solicitação, resposta, "", true, 8192, true); smart.initialize (PageContext); // inicialize a operação de upload smart.upload (); Iptimestamp seu = new iptimestamp (inetaddress.getLocalhost (). //Se você deseja implementar o upload de arquivos em loo em loop e alterar 0 no getFile (0) para i para string ext = smart.getfiles (). GetFile (0) .getFileExt (); // Esta é a extensão do arquivo, getFile (0) é o único arquivo de filename = seu. //System.out.println("O nome do arquivo obtido é "+nome do arquivo); //this.getServletContext().GetRealPath("/ ") Para obter o diretório Tomcat, ele é colocado na pasta de upload. java.io.file.separator é uma operação segura // string realpath = ""; //this.getServletContext().GetRealPath("/")+ smart.getfiles (). getFile (0) .Saveas ("/headuppload"+java.io.file.separator+nome do arquivo); String realpath = "headupload/"+filename+""; // // Como o formulário anterior foi encapsulado, não podemos simplesmente usar o request.getParameter () para obter os parâmetros do formulário String uname1 = smart.getRequest (). GetParameter ("uname1"); // apelido de string upass1 = smart.getRequest (). GetParameter ("senha1"); String sex = smart.getRequest (). GetParameter ("sexo"); String uname2 = smart.getRequest (). GetParameter ("uname2"); // nome de usuário string email = smart.getRequest (). GetParameter ("email"); PrintWriter out = Response.getWriter (); // O seguinte são operações de camada de persistência, omitidas. . . . . . . . . . } Void protegido doPost (solicitação httpServletRequest, resposta httpServletResponse) lança servletexception, ioexception {doget (solicitação, resposta); }}A classe IP+Timestamp iPtimestamp usada acima renomeia o arquivo:
Ao fazer upload de arquivos e outras operações, a fim de impedir que os nomes de arquivos conflitantes, executamos operações de renomeação. Aqui está uma nomeação que implementa o Timestamps IP+:
Acabei de enviar o código, não há nada a dizer, a implementação é bastante simples, mas prática
pacote com.xidian.bbs.util; importar java.text.simpledateFormat; importar java.util.date; importar java.util.random; public class iptimestamp {private simpledEformat sim = null; // usado para obter tempo privado ip = 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 ("//."); // dividir o endereço IP de acordo com o ponto, mas o ponto deve ser escapado para (int i = 0; i <A.Length; i ++) {sbf.append (this.addzero (a [i], 3)); // chamando o método de complemento zero, e cada IP com menos de três dígitos é complementado automaticamente a três dígitos} sbf.append (this.gettimestamp ()); // use isso para chamar o método externo aleatório = novo aleatório (); // criando um número aleatório para (int i = 0; i <3; i ++) {// criando número aleatório de três dígitos sbf.append (aleatoriamente.nextint (10)); // Cada número aleatório não excede 10}} retorna sbf.toString (); } @Suppresswarnings ("não utilizados") private string getDate () {// sobre data e hora this.sim = new SimpleDateFormat ("yyyy-mm-dd hh: mm: ss.sss"); retornar this.sim.format (new Date ()); } private string gettimestamp () {// retorna timestamp this.sim = new SimpleDateFormat ("yyyymmddhhmmsssss"); retornar this.sim.format (new Date ()); } private string addZero (string str, int len) {// O método automático de complemento zero, os parâmetros são o string especificado e o comprimento stringbuffer s = new StringBuffer (); S.Append (STR); while (S.Length () <len) {S.Insert (0, "0"); // Operação completa de complemento zero na posição zero} retornar s.ToString (); } // Teste public static void main (string [] ary) {iptimestamp iptimestamp = new iptimestamp ("172.168.3.222"); // chamando o construtor com parâmetros system.out.println (iptimestamp.getiptimerAnd ()); }}O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.