Os exemplos deste artigo compartilham o upload do arquivo e baixe o código de implementação Java para sua referência. O conteúdo específico é o seguinte
Recepção:
1. Método de envio: Post
2. Existem itens de formulário carregados de arquivo no formulário: <input type = "arquivo" />
3. Especifique o tipo de formulário:
Tipo padrão: ENCTYPE = "APLICAÇÃO/X-WWW-FORM-URLENCODED"
Tipo de upload de arquivo: multipart/form-data
FileUpload
É comumente usado no desenvolvimento da função de upload de arquivos e o Apache também fornece componentes de upload de arquivos!
Componente FileUpload:
1. Faça o download do código -fonte
2. Introduzir arquivos JAR no projeto
Commons-FileUpload-1.2.1.jar [Pacote de jar do núcleo do componente de upload de arquivos]
Commons-io-1.4.jar [classes de ferramentas relacionadas a bordados para processamento de arquivos]
usar:
public class O uploadServlet estende HttPServlet {// Diretório de upload, salve os recursos carregados public void Doget (solicitação httpServletRequest, httpServletResponse resposta) lança {FILETEXCOII********************************************************************************************************************************** fábrica = new DiskFileItemFactory (); // 2. Crie o upload de upload de arquivos CORET CLASS SERVletFileUpload upload = new ServletFileUpload (Factory); // 1. Defina o tamanho máximo permitido para um único arquivo: 30m upload.setFileSizEMAX (30*1024*1024); // 2. Defina o tamanho total permitido para o Formulário de Upload de Arquivo: 80M Upload.SetSizEMAX (80*1024*1024); // 3. Defina a codificação do nome do arquivo de formulário de upload // equivalente a: request.setcharacterencoding ("utf-8"); upload.setheadeRencoding ("UTF-8"); // 3. Determine: se o formulário atual é um formulário de upload de arquivo se (upload.ismultipartContent (request)) {// 4. Converta os dados solicitados em objetos FileItem e depois encapsula list <FileItem> list = upload.parseQuest (request); // Traversal: Obtenha cada dados enviados para (Item FileItem: List) {// Julgamento: Dados de Texto Normal se (item.isformfield ()) {// Dados de texto normal string fieldName = item.getFieldName (); // Formulário Nome do elemento String Content = Item.getString (); // Nome do elemento de formulário, Data correspondente //item.getString("utf-8 "); Especifique o sistema de codificação.out.println (fieldname + "" + content); } // File File (Stream de arquivo) ---> Upload para o diretório de upload {// Dados de texto normal string fieldName = item.getfieldName (); // Nome do elemento do formulário Nome da string = item.getName (); // Nome do arquivo string content = item.getString (); // Nome do elemento de formulário, Data String correspondente Tipo = item.getContentType (); // tipo de arquivo inputStream in = item.getInputStream (); // Carregar o fluxo de arquivos/** 4. O nome do arquivo é renomeado* para diferentes usuários Readme.txt Arquivos, não querem ser substituídos! * Processamento de fundo: Adicione uma tag exclusiva ao usuário! */ // a. Gerar aleatoriamente uma string de tag exclusiva id = uuid.randomuuid (). ToString (); // b. Nome da emenda com nome do arquivo = id + "#" + nome; // Obtenha o caminho da sequência do caminho da base de upload Path = getServletContext (). GetRealPath ("/upload"); // Crie o arquivo de arquivo de destino Arquivo = novo arquivo (caminho, nome); // classe de ferramenta, arquivo de upload de arquivo.write (arquivo); item.Delete (); // exclua o arquivo temporário gerado pelo sistema System.out.println (); }}} else {System.out.println ("O formulário atual não é um formulário de upload de arquivo, o processamento falhou!"); }} catch (Exceção e) {e.printStackTrace (); }} // A implementação manual do processo Private Void Upload (solicitação httpServletRequest) lança a ioexception, não suportadaEncodingException { /* request.getParameter (""); // get/post request.getQueryString (); // Obtenha os dados enviados pelo get request.getInputStream (); // Receba os dados enviados por post*//****************** Obtenha manualmente os dados do Formulário de Upload de Arquivo *************/// 1. Obtenha o fluxo de dados do formulário inputStream in = request.getInputStream (); // 2. Converter fluxo inputStreamReader Instream = new InputStreamReader (in, "UTF-8"); // 3. BufferredReader Reader = New BufferredReader (Instream); // Saída de dados string str = null; while ((str = leitor.readline ())! = null) {System.out.println (str); } // Saída de dados string str = null; while ((str = leitor.readline ())! = null) {System.out.println (str); } // fechar leitor.close (); Instruam.close (); in.Close (); } public void DoPost (solicitação httpServletRequest, httpServletResponse resposta) lança servletexception, ioexception {this.Doget (request, resposta); }}Caso:
Index.jsp
<Body> <a href = "$ {PageContext.Request.ContextPath} /upload.jsp"> upload de arquivo </a>Upload.jsp
<Body> <formulário name = "frm_test" action = "$ {PagEContext.Request.ContextPath}/fileServlet? Método = upload" method = "post" Enctype = "Multipart/form-data"> <%-<input Type = "Hidden" Nome = "Método" = "UPLOUP">-%> Arquivo: <input type = "file" name = "file_img"> <br/> <input type = "submit" value = "submit"> </form> </body>FileServlet.java
/** * Lidar com upload e download de arquivos * @author jie.yuan * */public class FileVetlet estende httpServlet {public void Doget (httpServletReQuest Request, httpServletResponse Response; if ("upload" .equals (método)) {// upload upload (solicitação, resposta); } else if ("Lista Downlist" .equals (método)) {// Digite a lista de download da lista (solicitação, resposta); } else if ("Down" .equals (método)) {// download (solicitação, resposta); }} / ** * 1. Upload * / Void privado upload (solicitação httpServletRequest, httpServletResponse resposta) lança servletexception, ioexception {try {// 1. Criar objeto de fábrica FileItemfactory Factory = new DiskFileItemFactory (); // 2. Classe de ferramenta Core de upload de arquivos servletfileUpload upload = new ServletfileUpload (fábrica); // Definir parâmetros de limite de tamanho do tamanho do upload.setFilesizEMAX (10*1024*1024); // Limite de tamanho de arquivo único upload.SetSizEMAX (50*1024*1024); // Tamanho total do arquivo de tamanho do arquivo upload.setheadeRencoding ("UTF-8"); // Processando a codificação de arquivos chineses // juiz if (upload.ismultipartContent (request)) {// 3. Converta os dados da solicitação para listar lista de coleta <FileItem> list = upload.parsequest (request); // Traversal for (FileItem Item: List) {// julgamento: dados de texto normal se (item.isformfield ()) {// obtenha o nome String name = item.getfieldName (); // obtenha o valor da String Value = item.getString (); System.out.println (valor); } // Item do formulário do arquivo { / ************ Upload de arquivo **************** / // a. Obtenha o nome do arquivo string name = item.getName (); // --- Lidar com o problema de fazer upload do nome do nome do arquivo-Nome duplicado ---- // A1. Obtenha o único ID da string mark = uuid.randomuuid (). ToString (); // A2. Nome do arquivo de emenda Nome = id + "#" + nome; // b. Obtenha o diretório de upload String BasEpath = getServletContext (). GetRealPath ("/upload"); // c. Crie o objeto Arquivo a ser carregado arquivo de arquivo = novo arquivo (Basepath, nome); // d. Upload item.write (arquivo); item.Delete (); // Exclua o arquivo temporário gerado quando o componente estiver em execução}}}}} catch (Exceção e) {e.printStackTrace (); }} / *** 2. Digite a lista de download* / Lista do Downlist privada (HttpServletRequest, httpServletResponse Response lança servletexception, ioexception {// Idea de implementação: primeiro obtenha os nomes de arquivos de todos os arquivos no diretório de upload e depois salvar; Salte para a lista Down.jsp para exibir // 1. Inicialize o mapa de coleta do mapa <Nome do arquivo contendo tags exclusivas, nome de arquivo curto>; Mapa <string, string> filenames = new hashmap <string, string> (); // 2. Obtenha o diretório de upload e os nomes de arquivos de todos os arquivos em String Bathpath = getServletContext (). GetRealPath ("/upload"); // Arquivo de diretório Arquivo = novo arquivo (Bathpath); // No diretório, todos os nomes de arquivos string list [] = file.list (); // Traversal, encapsular if (list! = Null && list.length> 0) {for (int i = 0; i <list.length; i ++) {// Nome completo string filename = list [i]; // Nome curto string shortName = filename.substring (filename.lastindexof ("#")+1); // encapsular os nomes de filas.put (nome do arquivo, shortname); }} // 3. Salvar para solicitar o domínio request.setAttribute ("nomes de arquivos", nomes de arquivos); // 4. Forward Request.GetRequestDispatcher ("/Downlist.jsp"). Forward (solicitação, resposta); } / *** 3. Handle Download* / private void Down (solicitação httpServletRequest, resposta httpServletResponse) lança servletexception, ioexception {// obtenha o nome do arquivo baixado pelo usuário (anexa os dados após o endereço URL, obtenha) string filename = request.getParameter ("FILENAME"; FILENAME = new String (FILENAME.GETBYTES ("ISO8859-1"), "UTF-8"); // Obtenha o caminho do diretório de upload String string BasEpath = getServletContext (). GetRealPath ("/upload"); // Obtenha um fluxo de arquivo inputStream em = new FileInputStream (novo arquivo (baseepath, nome do arquivo)); // Se o nome do arquivo for chinês, a codificação de URL precisará ser executada nome do arquivo = urlencoder.encode (nome do arquivo, "UTF-8"); // Defina o cabeçalho da resposta para o download da resposta.setheader ("Content-Disposition", "Applement; filename =" + FileName); // Obtenha resposta Byte Stream outputStream out = Response.getOutputStream (); byte [] b = novo byte [1024]; int len = -1; while ((len = in.read (b))! = -1) {out.write (b, 0, len); } // feche out.close (); in.Close (); } public void DoPost (solicitação httpServletRequest, httpServletResponse resposta) lança servletexception, ioexception {this.Doget (request, resposta); }}O exposto acima é tudo sobre este artigo, espero que seja útil para o aprendizado de todos.