写在前面:简单的上传文件的小demo,拿过来就可以用。有什么疑问可以加版主交流,共同学习。QQ:70747053。

   之前在网上找了很多小例子,好多都有错,调试一段时间也烦了,索性自己写点。本来因为自己懒不是很想写,呵呵。就当温习了。

   实现上传文件需要apache提供的两个jar包:

   commons-fileupload-1.2.2.jar:http://commons.apache.org/fileupload/

   commons-io-2.4.jar:http://commons.apache.org/io/


   然后是简单的JSP页面:

   需要注意的是:form表单里面有个属性enctype="multipart/form-data",这是必须写的。具体参考文档:http://www.w3school.com.cn/tags/att_form_enctype.asp

   


  
  1. <%@ page language="java" contentType="text/html; charset=UTF-8" 
  2.     pageEncoding="UTF-8"%> 
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
  4. <html> 
  5. <head> 
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
  7. <title>Insert title here</title> 
  8. <script type="text/javascript"> 
  9.     function reFun(msg) { 
  10.         alert(msg); 
  11.     } 
  12. </script> 
  13.  
  14. <script type="text/javascript" src="js/jquery-1.4.2.min.js"></script> 
  15. <script type="text/javascript"> 
  16.     function uploads() { 
  17.         $("#frmUpload")[0].submit(); 
  18.     } 
  19. </script> 
  20. <style type="text/css"> 
  21.     #load{ 
  22.         background:url('img/loading.gif') no-repeat; 
  23.         height:80px; 
  24.         border:1px solid red; 
  25.     } 
  26. </style> 
  27. </head> 
  28. <body> 
  29. <div id="load">&nbsp;</div> 
  30.     <form id="frmUpload" target="uploadframe" enctype="multipart/form-data" 
  31.         action="uploadFile" method="post"> 
  32.         <input type="file" name="file" id="file" /> <input type="button" 
  33.             value="上传" id="uload" onclick="uploads()" /> 
  34.     </form> 
  35.     <iframe id="uploadframe" name="uploadframe" style="display: none"></iframe> 
  36. </body> 
  37. </html> 


这里面有些锦上添花的东西,各位看官各凭所好自己添或删。

 

    然后就是Java类,处理发来的请求:

    


  
  1. package cn.upload.servlet; 
  2.  
  3. import java.io.File; 
  4. import java.io.FileOutputStream; 
  5. import java.io.IOException; 
  6. import java.io.InputStream; 
  7. import java.io.OutputStream; 
  8. import java.util.Iterator; 
  9. import java.util.List; 
  10.  
  11. import javax.servlet.ServletException; 
  12. import javax.servlet.http.HttpServlet; 
  13. import javax.servlet.http.HttpServletRequest; 
  14. import javax.servlet.http.HttpServletResponse; 
  15.  
  16. import org.apache.commons.fileupload.FileItem; 
  17. import org.apache.commons.fileupload.disk.DiskFileItemFactory; 
  18. import org.apache.commons.fileupload.servlet.ServletFileUpload; 
  19.  
  20. public class UploadServlet extends HttpServlet { 
  21.     /** 
  22.      *  
  23.      */ 
  24.     private static final long serialVersionUID = -3159753144050260701L; 
  25.  
  26.     @Override 
  27.     protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
  28.             throws ServletException, IOException { 
  29.         req.setCharacterEncoding("UTF-8"); 
  30.         DiskFileItemFactory fac = new DiskFileItemFactory(); 
  31.         ServletFileUpload fu = new ServletFileUpload(fac); 
  32.         resp.setCharacterEncoding("utf-8"); 
  33.         resp.setContentType("text/html"); 
  34.         try { 
  35.              //上传文件,并解析出所有的表单字段,包括普通字段和文件字段 
  36.             List list = fu.parseRequest(req); 
  37.               //下面对每个字段进行处理,分普通字段和文件字段 
  38.             Iterator i = list.iterator(); 
  39.             while (i.hasNext()) { 
  40.                 FileItem fileItem = (FileItem) i.next(); 
  41.                 if (!fileItem.isFormField()) { 
  42.                     String name = fileItem.getName(); 
  43.                     InputStream is = fileItem.getInputStream(); 
  44.                     String p="D:/uploads/"
  45.                     File file = new File(p); 
  46.                     if(!file.exists()){ 
  47.                         file.mkdirs(); 
  48.                     } 
  49.                     OutputStream os = new FileOutputStream(p + name); 
  50.                     try { 
  51.                         byte[] b = new byte[2048]; 
  52.                         int index = is.read(b, 0, b.length); 
  53.                         while (index != -1) { 
  54.                             os.write(b, 0, index); 
  55.                             index = is.read(b, 0, b.length); 
  56.                         } 
  57.                         resp.getWriter().println( 
  58.                                 "<script>window.parent.reFun('ok')</script>"); 
  59.                     } catch (Exception e) { 
  60.                         e.printStackTrace(); 
  61.                         resp.getWriter() 
  62.                                 .println( 
  63.                                         "<script>window.parent.reFun('error')</script>"); 
  64.                     } finally { 
  65.                         os.close(); 
  66.                         is.close(); 
  67.                     } 
  68.                 } 
  69.             } 
  70.         } catch (Exception e) { 
  71.             e.printStackTrace(); 
  72.             resp.getWriter().println( 
  73.                     "<script>window.parent.reFun('error')</script>"); 
  74.         } 
  75.  
  76.     } 

   

  有些注释没加,大家应该都可以看得懂,真心懒得加了。

  还有就是web.xml里面的配置:

  


  
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 
  3.   <servlet> 
  4.     <servlet-name>uploadFile</servlet-name> 
  5.     <servlet-class>cn.upload.servlet.UploadServlet</servlet-class> 
  6.   </servlet> 
  7.   <servlet-mapping> 
  8.     <servlet-name>uploadFile</servlet-name> 
  9.     <url-pattern>/uploadFile</url-pattern> 
  10.   </servlet-mapping> 
  11. </web-app> 

  基本上就这样,这个上传文件的demo很简陋,希望可以抛砖引玉。

 

  注:我这是在Eclipse下写的。如果你配置在MyEclipse里面可能会少servlet-api.jar,可以手动导入。