利用commons-fileupload组件实现文件上传-实例

一、所需要的包:

1、commons-fileupload-1.2.1.jar:

下载地址
http://commons.apache.org/downloads/download_fileupload.cgi

2、commons-io-1.4.jar:

下载地址
http://commons.apache.org/downloads/download_io.cgi

 

 

二、注意事项:

form表单里面要加上enctype="multipart/form-data"

 

三、代码示例

 

1、jsp代码:

Jsp代码   收藏代码
  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>upload</title>  
  8. </head>  
  9. <body>  
  10. <form action="uploadServlet" method="post" enctype="multipart/form-data">  
  11.     <table>  
  12.     <caption>上传实例</caption>  
  13.         <tr>  
  14.             <td>姓名</td>  
  15.             <td>  
  16.                 <input type="text" name="name">  
  17.             </td>  
  18.         </tr>  
  19.         <tr>  
  20.             <td>年龄</td>  
  21.             <td>  
  22.                 <input type="text" name="age">  
  23.             </td>  
  24.         </tr>  
  25.         <tr>  
  26.             <td>照片</td>  
  27.             <td>  
  28.                 <input type="file" name="image">  
  29.             </td>  
  30.         </tr>  
  31.         <tr>  
  32.             <td></td>  
  33.             <td>  
  34.                 <input type="submit" value="提交">  
  35.             </td>  
  36.         </tr>  
  37.     </table>  
  38. </form>  
  39. </body>  
  40. </html>  

 

2、UploadServlet代码

Java代码   收藏代码
  1. package servlet;  
  2.   
  3. import java.io.BufferedInputStream;  
  4. import java.io.BufferedOutputStream;  
  5. import java.io.File;  
  6. import java.io.FileOutputStream;  
  7. import java.io.IOException;  
  8. import java.io.Writer;  
  9. import java.util.Iterator;  
  10. import java.util.List;  
  11.   
  12. import javax.servlet.ServletException;  
  13. import javax.servlet.http.HttpServlet;  
  14. import javax.servlet.http.HttpServletRequest;  
  15. import javax.servlet.http.HttpServletResponse;  
  16.   
  17. import org.apache.commons.fileupload.FileItem;  
  18. import org.apache.commons.fileupload.FileUploadException;  
  19. import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;  
  20. import org.apache.commons.fileupload.disk.DiskFileItemFactory;  
  21. import org.apache.commons.fileupload.servlet.ServletFileUpload;  
  22. import org.apache.commons.fileupload.util.Streams;  
  23.   
  24. /** 
  25.  * 上传servlet 
  26.  * @author lisanlai 
  27.  * 
  28.  */  
  29. public class UploadServlet extends HttpServlet {  
  30.     private static final long serialVersionUID = 1L;  
  31.          
  32.     public UploadServlet() {  
  33.         super();  
  34.     }  
  35.   
  36.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
  37.         this.doPost(request, response);  
  38.     }  
  39.   
  40.     @SuppressWarnings("unchecked")  
  41.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
  42.           
  43.         response.setContentType("text/html");     
  44.         // 设置字符编码为UTF-8, 这样支持汉字显示     
  45.         response.setCharacterEncoding("UTF-8");  
  46.         Writer o = response.getWriter();  
  47.           
  48.         /** 
  49.          * 首先判断form的enctype是不是multipart/form-data 
  50.          * 同时也判断了form的提交方式是不是post 
  51.          * 方法:isMultipartContent(request) 
  52.          */  
  53.       
  54.         if(ServletFileUpload.isMultipartContent(request)){  
  55.             request.setCharacterEncoding("utf-8");  
  56.               
  57.             // 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload     
  58.             DiskFileItemFactory factory =  new DiskFileItemFactory();  
  59.               
  60.             //设置文件存放的临时文件夹,这个文件夹要真实存在  
  61.             File fileDir = new File("../webapps/fileupload/tmp/");  
  62.             if(fileDir.isDirectory() && fileDir.exists()==false){  
  63.                 fileDir.mkdir();  
  64.             }  
  65.             factory.setRepository(fileDir);  
  66.               
  67.             //设置最大占用的内存  
  68.             factory.setSizeThreshold(1024000);  
  69.               
  70.             //创建ServletFileUpload对象  
  71.             ServletFileUpload sfu = new ServletFileUpload(factory);  
  72.             sfu.setHeaderEncoding("utf-8");  
  73.               
  74.             //设置单个文件最大值byte   
  75.             sfu.setFileSizeMax(102400000);  
  76.               
  77.             //所有上传文件的总和最大值byte     
  78.             sfu.setSizeMax(204800000);  
  79.               
  80.             List<FileItem> items =  null;  
  81.               
  82.             try {  
  83.                 items = sfu.parseRequest(request);  
  84.             }catch (SizeLimitExceededException e) {     
  85.                 System.out.println("文件大小超过了最大值");     
  86.             } catch(FileUploadException e) {     
  87.                 e.printStackTrace();     
  88.             }   
  89.               
  90.             //取得items的迭代器  
  91.             Iterator<FileItem> iter = items==null?null:items.iterator();  
  92.               
  93.             //图片上传后存放的路径目录  
  94.             File images = new File("D:/upload/images/");  
  95.             if(images.exists()==false){  
  96.                 images.mkdirs();  
  97.             }  
  98.             //迭代items  
  99.             while(iter!=null && iter.hasNext()){  
  100.                 FileItem item = (FileItem) iter.next();  
  101.                   
  102.                 //如果传过来的是普通的表单域  
  103.                 if(item.isFormField()){  
  104.                     System.out.print("普通的表单域:");     
  105.                     System.out.print(new String(item.getFieldName()) + "  ");     
  106.                     System.out.println(new String(item.getString("UTF-8")));     
  107.                 }  
  108.                 //文件域  
  109.                 else if(!item.isFormField()){  
  110.                     System.out.println("源图片:" + item.getName());     
  111.                     String fileName = item.getName().substring(item.getName().lastIndexOf("\\"));  
  112.                     BufferedInputStream in = new BufferedInputStream(item.getInputStream());  
  113.                     //文件存储在D:/upload/images目录下,这个目录也得存在   
  114.                     BufferedOutputStream out = new BufferedOutputStream(     
  115.                             new FileOutputStream(new File(images.getAbsolutePath()+ fileName)));   
  116.                     Streams.copy(in, out, true);     
  117.                     o.write("文件上传成功");  
  118.                 }  
  119.             }  
  120.         }else {     
  121.             System.out.println("表单的enctype 类型错误");     
  122.         }   
  123.     }  
  124.   
  125. }  

 

3、web.xml

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.   <display-name>UploadTest</display-name>  
  4.   <welcome-file-list>  
  5.     <welcome-file>upload.jsp</welcome-file>  
  6.   </welcome-file-list>  
  7.   <servlet>  
  8.     <description></description>  
  9.     <display-name>UploadServlet</display-name>  
  10.     <servlet-name>UploadServlet</servlet-name>  
  11.     <servlet-class>servlet.UploadServlet</servlet-class>  
  12.   </servlet>  
  13.   <servlet-mapping>  
  14.     <servlet-name>UploadServlet</servlet-name>  
  15.     <url-pattern>/uploadServlet</url-pattern>  
  16.   </servlet-mapping>  
  17. </web-app>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值