Este artigo usa exemplos para introduzir como usar o Commons-FileUpload.jar. O Commons-FileUpload.jar da Apache para facilitar a função de upload dos arquivos. O conteúdo específico é o seguinte
Coloque o Commons-FileUpload.jar da Apache no Web-Inf/Lib no aplicativo e ele está pronto para uso. O exemplo a seguir mostra como usar sua função de upload de arquivo.
A versão FileUpload usada é 1.2 e o ambiente é eclipse3.3+myeclipse6.0. O FileUpload é baseado no Commons IO; portanto, antes de entrar no projeto, determine o pacote JAR of Commons IO (usando o Commons-1.3.2.2.Jar neste artigo) em Web-Inf/Lib.
Este artigo é um projeto de exemplo que pode ser baixado no anexo no final do artigo.
Exemplo 1
O exemplo mais simples é analisar a solicitação através da classe estática ServletFileUpload. A classe de fábrica FileItemFactory processará todos os campos na forma da classe Mulipart, não apenas os campos de arquivo. getName () recebe o nome do arquivo, getString () obtém o conteúdo dos dados do formulário e o isformfield () pode determinar se é um item de formulário comum.
Demo1.html
<html> <head> <meta http-equiv = "content-type" content = "text/html; charset = gb18030"> <title> upload de arquivo </title> </ad Head> <body> // deve ser dados de formulário multipartidário. <nome name = "myform" action = "Demo1.jsp" method = "post" Enctype = "Multipart/form-Data"> Seu nome: <br> <input type = "text" name = "name" size = "15"> <br> <br>: <br> <br> <brut type = "file" name = "myfile" "> <br> <br> <br> </morm> </body> </html>
Demo1.jsp
<%@ página linguagem = "java" contentType = "text/html; charset = gb18030" PageEncoding = "gb18030"%> <%@ página import = "org.apache.commons.fileupload. import = "org.apache.commons.fileupload.disk.*"%> <%@ página import = "java.util.*"%> <! Doctype html public "-// W3C // dTD Html 4.01 transitional // enone> <%boolean ismmultipart =; A solicitação de entrada são dados de formulário multipart. if (ismultipart == true) {FileItemFactory Factory = new DiskFileItemFactory (); // Crie um objeto DiskFileItemFactory para a solicitação e analise a solicitação. Depois que a análise é executada, todos os itens de formulário são salvos em uma lista. ServletfileUpload upload = new ServletFileUpload (fábrica); List <FileItem> itens = upload.parserequest (solicitação); Iterator <FileItem> itr = items.iterator (); while (itr.hasnext ()) {fileItem item = (fileItem) itr.Next (); // Verifique se o projeto atual é um projeto de formulário normal ou um arquivo de upload. if (item.isformfield ()) {// Se for um item de formulário normal, exiba o conteúdo do formulário. String fieldname = item.getfieldName (); if (fieldname.equals ("name")) // resposta a type = "text" name = "name" out.print ("o nome do campo é" + item.getString ()); // mostra conteúdo do formulário. out.print ("<br>"); } else {// Se estiver carregando um arquivo, exiba o nome do arquivo. out.print ("O nome do arquivo de upload é" + item.getName ()); out.print ("<br>"); }}} else {out.print ("o Enctype deve ser multipart/formulário"); }%> <html> <head> <meta http-equiv = "content-type" content = "text/html; charset = gb18030"> <title> upload </title> </ad Head> <body> </body> </html> resultado:
o nome do campo isjeff
o nome do arquivo de upload ISD:/c Amostra de teste de idioma/perguntas de casa.
Exemplo 2
Carregue dois arquivos para o diretório especificado.
Demo2.html
<html> <head> <meta http-equiv = "content-type" content = "text/html; charset = gb18030"> <title> upload </title> </head> <body> <formulário "myform" action = "Demo2.jsp" "=" post "<11Brte =" Form) name = "myfile"> <br> file2: <br> <input type = "file" name = "myfile"> <br> <br> <input type = "submit" name = "submit" value = "commit"> </mand> </body> </html>
Demo2.jsp
<%@ página linguagem = "java" contentType = "text/html; charset = gb18030" PageEncoding = "gb18030"%> <%@ página import = "org.apache.commons.fileupload. import = "org.apache.commons.fileupload.disk.*"%> <%@ página import = "java.util.*"%> <%@ página import = "java.io.*"%> <! boolean ismultipart = servletfileUpload.ismultipartContent (solicitação); if (ismultipart == true) {try {FileItemFactory Factory = new DiskFileItemFactory (); ServletfileUpload upload = new ServletFileUpload (fábrica); List <FileItem> itens = upload.parserequest (request); // obtenha todos os arquivos iterator <FileItem> itr = items.iterator (); while (itr.hasnext ()) {// treina cada item de arquivo = (fileItem) itr.Next (); String filename = item.getName (); // Obtenha o nome do arquivo, incluindo o caminho se (nome do arquivo! = Null) {file fullFile = new File (item.getName ()); Arquivo savedFile = novo arquivo (uploadPath, fullfile.getName ()); item.write (salvado); }} out.print ("upload de sucesso"); } catch (Exceção e) {e.printStackTrace (); }} else {out.println ("o Enctype deve ser multipart/form-data"); }%> <html> <head> <meta http-equiv = "content-type" content = "text/html; charset = gb18030"> <title> upload </title> </ad Head> <body> </body> </html> resultado:
upload ter sucesso
No momento, você pode ver os dois arquivos que você carregou em "d:/temp".
Exemplo 3
Carregue um arquivo no diretório especificado e limite o tamanho do arquivo.
Demo3.html
<html> <head> <meta http-equiv = "content-type" content = "text/html; charset = gb18030"> <title> upload </title> </head> <body> <formulário "Myform" action = "Demo3.jsp" = "post" post> " name = "myfile"> <br> <br> <input type = "submit" name = "submit" value = "commit"> </mand> </body> </html>
Demo3.jsp
<%@ página linguagem = "java" contentType = "text/html; charset = gb18030" PageEncoding = "gb18030"%> <%@ página import = "org.apache.commons.fileupload. import = "org.apache.commons.fileupload.disk.*"%> <%@ página import = "java.util.*"%> <%@ página import = "java.io.*"%> <! Arquivo ("d: // temp"); // upload do diretório de arquivos if (! Uploadpath.exists ()) {uploadpath.mkdirs (); } // arquivo de diretório de arquivos temporários temppathfile = novo arquivo ("d: // temp // buffer //"); if (! temppathfile.exists ()) {temppathfile.mkdirs (); } tente {// Crie uma fábrica para itens de arquivo baseados em disco DiskFileItemFactory Factory = new DiskFileItemFactory (); // defina restrições de fábrica fábrica.SetSizETHreshold (4096); // Defina o tamanho do buffer, aqui está 4KB Factory.SetRepository (TemppathFile); // Definir diretório de buffer // crie um novo manipulador de upload de arquivos servletfileUpload upload = new ServletFileUpload (fábrica); // Defina o upload de restrição de tamanho geral do tamanho da solicitação.SetSizEMAX (4194304); // Defina o tamanho máximo do arquivo, aqui está 4MB List <FileItem> itens = upload.parserequest (request); // obtenha todos os arquivos iterator <FileItem> i = items.iterator (); while (i.hasNext ()) {fileItem fi = (fileItem) i.next (); String filename = fi.getName (); if (nome do arquivo! = null) {arquivo fullfile = new File (fi.getName ()); Arquivo savedFile = novo arquivo (uploadPath, FullFile .getName ()); fi.Write (SAVEDFILE); }} out.print ("upload de sucesso"); } catch (Exceção e) {e.printStackTrace (); }%> <html> <head> <meta http-equiv = "content-type" content = "text/html; charset = gb18030"> <title> upload </title> </ad Head> <body> </body> </html> Exemplo 4
Use o servlet para implementar o upload do arquivo.
Upload.java
pacote com.zj.sample; import java.io.File;import java.io.IOException;import java.util.Iterator;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.httpServletResponse; importar org.apache.commons.fileupload.fileitem; importar org.apache.commons.fileupload.disk.diskfileitemFactory; importar.apache.commonsPload.Disk.Sisk.Sisk.Sisk; @Suppresswarnings ("serial") upload da classe pública estende HttpServlet {private string uploadpath = "d: // temp"; // diretório para fazer upload de arquivos private string temppath = "d: // temp // buffer //"; // arquivo de diretório de arquivos temporário temppathfile; @Suppresswarnings ("desmarcados") public void DoPost (solicitação HttpServletRequest, resposta httpServletResponse) lança ioexception, servletexception {try {// criar um fábrica para itens de arquivo baseados em disco DiscenteMactory = new DiskFileItemFactory (); // defina restrições de fábrica fábrica.SetSizETHreshold (4096); // Defina o tamanho do buffer, aqui está 4KB Factory.SetRepository (TemppathFile); // Definir diretório de buffer // crie um novo manipulador de upload de arquivos servletfileUpload upload = new ServletFileUpload (fábrica); // Defina o upload de restrição de tamanho geral do tamanho da solicitação.SetSizEMAX (4194304); // Defina o tamanho máximo do arquivo, aqui está 4MB List <FileItem> itens = upload.parserequest (request); // obtenha todos os arquivos iterator <FileItem> i = items.iterator (); while (i.hasNext ()) {fileItem fi = (fileItem) i.next (); String filename = fi.getName (); if (nome do arquivo! = null) {arquivo fullfile = new File (fi.getName ()); Arquivo savedFile = novo arquivo (uploadPath, fullfile.getName ()); fi.Write (SAVEDFILE); }} System.out.print ("Upload sucessivo"); } catch (Exceção e) {// A página de erro pode ser saltada. }} public void init () lança servleTexception {file uPLOPLEFILE = novo arquivo (uploadPath); if (! uploadfile.exists ()) {uploadfile.mkdirs (); } Arquivo temppathfile = novo arquivo (temppath); if (! temppathfile.exists ()) {temppathfile.mkdirs (); }}} Demo4.html
<html> <head> <meta http-equiv = "content-type" content = "text/html; charset = gb18030"> <title> upload </title> </head> <body> // action = "fileUpload" corresponde à configuração de <url-pattern> em <ervletle-mappm> <formulário (name = "myform" action = "fileUpload" method = "post" Enctype = "multipart/form-data"> arquivo: <br> <input type = "file" name = "myfile"> <br> <br> <input type = "submit" name = "submin" value = "Commits"> </fort> </body> </hit ">
web.xml
<Vertlet> <Verlet-name> upload </servlet-name> <Servlet-class> com.zj.sample.upload </servlet-class> </servlet> <sirtlet-mapping> <Vertlet-name> upload </servlet-name> <url-stattern>/fileUPLOAD </url-tattern>
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.