Aqui eu uso arquivos baseados em servlet de upload assíncrono. Não digo muita bobagem e apenas carrego o código. . .
package com.future.zfs.util;import java.io.File;import java.io.IOException;import java.io.PrintWriter;import java.util.Iterator;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.httpServletReQuest; importar javax.servlet.http.httpServletResponse; importar org.apache.commons.fileupload.fileitem; import orgache.commons.fileUplOad.fileUploadex org.apache.commons.fileupload.fileuploadbase.sizelimitexcedException; importar org.apache.commons.fileupload.disk.diskfileitemfactory; importfileuM) ssteraluM) (slastFeLeUsTletMactory; FileUploadServlet estende httpServlet {final MAX_SIZE = 10 * 1024 * 1024; // Defina o arquivo máximo de upload como 10m // Lista de formatos de arquivo permitidos para ser carregado final String final [] allowType = new String [] {"jpg", "jpeg", "gif", "txt", "doc", "docx", "mp3", "wma", "m4a", "xls"}; public fileUploadServlet () {super (); } public void Destroy () {super.Destroy (); } @Override Protected Void Service (solicitação httpServletRequest, httpServletResponse resposta) lança servletexception, ioexception {Response.setContentType ("text/html"); // Defina o caractere codificando como UTF-8, para que o caractere chinês seja exibido. // instanciar uma fábrica de arquivos de disco rígido para configurar o componente de upload servletfileUpload diskFileItemFactory dfif = new DiskFileItemFactory (); dfif.SetSizEthReshold (4096); // Defina o tamanho da memória usado para armazenar temporariamente os arquivos ao fazer o upload de arquivos, aqui é 4K. Mais do que a peça existirá temporariamente no disco rígido dfif.setRepository (novo arquivo (request.getRealPath ("/") + "uploadtemp")); // Defina o diretório em que os arquivos temporários são armazenados, o diretório de uploadTEMP no diretório raiz da web // instantiado com o componente de upload com o fábrica acima ServletFileUpload (DFIF); // Defina o tamanho máximo de upload sfu.setsizemax (max_size); PrintWriter out = Response.getWriter (); // Obtenha uma lista de todos os campos de upload da lista de solicitações FILELIST = NULL; tente {filelist = sfu.parserequest (solicitação); } catch (fileUploadexception e) {// manipula o tamanho do arquivo exceção muito grande se (e instância de sizelimitexcededException) {out.println ("{message: 'tamanho do arquivo excede o tamanho especificado:"+max_size+"byte'}"); retornar; } E.PrintStackTrace (); } // nenhum arquivo upload if (filelist == null || filelist.size () == 0) {out.println ("{message: 'Selecione o upload file'}"); retornar; } // Obtenha todos os arquivos carregados iterador fileitr = filelist.iterator (); // loop todos os arquivos while (fileitr.hasnext ()) {fileItem fileItem = null; Caminho da string = null; tamanho longo = 0; // Obtenha o arquivo fileItem atual = (FileItem) fileitr.Next (); // ignora o campo de formulário simples em vez do domínio do arquivo do domínio carregado (<input type = "text" />, etc.) if (fileItem == null || fileItem.isformfield ()) {continua; } // Obtenha o caminho completo do caminho do arquivo = fileItem.getName (); // Obtenha o tamanho do arquivo timizada = FILEITEM.GETSIZE (); if ("" .equals (caminho) || size == 0) {out.println ("{message: 'Selecione o upload file'}"); retornar; } // Obtenha o nome do arquivo do caminho removido string t_name = path.substring (path.lastindexof ("//") + 1); // Obtenha a extensão do arquivo (o nome completo será obtido sem uma extensão) string t_ext = t_name.substring (t_name.lastIndexof (".") + 1); // negar o tipo de arquivo fora do arquivo de arquivo especificado int allowflag = 0; int alloweDextCount = allowtype.length; para (; allowflag <alloweDextCount; allowflag ++) {if (allowType [allowflag] .equals (t_ext)) quebra; } if (allowflag == alloweDextCount) {string message = ""; for (allowflag = 0; allowflag <alloweDextCount; allowflag ++) {message+= "*." + allowtype [allowflag] + ""; } out.println ("{message: 'Por favor, faça o upload do seguinte tipo de arquivo"+message+"'}"); retornar; } long agora = System.CurrentTimemillis (); // Gere o nome do arquivo salvo após o upload de acordo com o tempo de string time prefix = string.valueof (agora); // O caminho completo do arquivo final salvo é salvo no diretório de upload no diretório raiz do web u_name = request.getRealPath ("/") + "upload/" + prefixo + "". + t_ext; // o nome do arquivo original Path = request.getRealPath ("/") + "upload/" + path; tente {// salvar o arquivo fileItem.write (novo arquivo (caminho)); Response.setStatus (200); out.println ("{message:/" Arquivo upload com sucesso. salvo como: " + prefixo +". " + t_ext +" tamanho do arquivo: " + tamanho +" byte/"}"); } catch (Exceção e) {e.printStackTrace (); }}}} web.xml
<Verlet> <Verlet-name> fileUploadServlet </servlet-name> <Servlet-class> com.future.zfs.util.fileuploadservlet </servlet-class> </servlet> <url-Mapping> <arerlet-name> FileUplOadServlet </Name> <urL-Mapping> </servlet-mapping>
Página de upload
<%@ página de página = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <! Doctype html public "-// w3c // dtd html 4.01 transitório // en" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv = "content-type" content = "text/html; charset = utf-8"> <titler> insert title aqui </title> <script typen; src = "js/jQuery.js"> </script> <script type = "text/javascript" src = "js/ajaxfileupload.js"> </script> <script type = "text/javascript"> function ajaxFileUST () {($ "#ladring"). $ (this) .show (); False FileElementId: 'arquivo', // O atributo de ID do espaço de upload do arquivo <input type = "file" id = "arquivo" name = "arquivo"/> datatype: 'json', // O tipo de valor de retorno geralmente é definido como JSON SUCCESS: FUNCTA (Data, status) // O servidor responde com sucessivamente a função de processamento {//alertdaind $ ('#myspan') definido em struts2. If (typeof (data.error)! = 'Indefinido') {if (data.error! = '') {//Alert(data.error); $ ('#myspan'). html (data.message); } else {//alert(data.message); $ ('#myspan'). html (data.message); }}}, erro: function (dados, status, e) // função de manuseio de falha de resposta ao servidor {// alert (e); $ ('#myspan'). html (e); }}) retornar false; } </script> </ad Head> <body> <img src = "imagens/carregamento.gif" id = "carregando" style = "display: none;"> <span style = "cor: vermelho;" id = "myspan"> </span> <br/> <input type = "file" id = "file" name = "file"/> <r/> <input type = "button" value = "upload" onclick = "return ajaxfileupload ();"> <a href = "fileDOwnloadVertlet? Fillename = lomber.xxeplOad.xxeload.xxeload ()," FilDown) </body> </html> Deve -se notar que, ao usar o AjaxFileUpload para fazer upload com base no servlet, você precisa definir a resposta.SetContentType ("Text/html"); Embora o Datatype: 'JSON' esteja definido como JSON, você ainda precisa definir a resposta.SetContentType ("Text/html"); Caso contrário, os dados retornados pelo servidor não podem ser obtidos e uma caixa de diálogo será exibida.
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.