注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

程序员驿站

淘宝店:http://shop106888457.taobao.com

 
 
 

日志

 
 

Java上传文件—FileUpload组件介绍 .  

2014-08-20 11:00:52|  分类: JQuery |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
一般在用Servlet处理表单元素时,表单元素都是一些简单的文本,Servlet很容易用Request.getParameter()就可以处理。但是当表单不止包含一些简单的文本,比如有上传文件域时,Servlet直接从HttpServletRequest对象中解析出复合表单的每一个子部分仍然是一项非常复杂的工作.

  为了简化对“multipart/form-data”类型数据的处理过程,可以采用相应的组件进行处理,这样可以节省很大的编码、支持重用,效率也挺高。

  对于Java的组件也有一些:FileUploadSmartUploadCos等等,本文就以ApacheFileUpload讲解一下。

  要使用FileUpload,首先应下载相应组件:

  1.fileupload软件包:http://commons.apache.org/fileupload/

  2.io软件包:http://commons.apache.org/io/

  下载后解压zip 包,将commons-fileupload-1.2.1.jarcommons-io-1.4.jar 复制到tomcat webapp/WEB-INF/lib下。

 

 

一、表单页面(要指定表单的enctype="multipart/form-data")——Upload.html

  1. <html>  
  2. <head>  
  • <title>Upload</title>  
  • </head>  
  • <body >  
  •   <form name="uploadForm" method="POST"  
  •     enctype="MULTIPART/FORM-DATA"  
  •     action="upload">  
  •     <table>  
  •       <tr>  
  •        <td><div align="right">User Name:</div></td>  
  •        <td><input type="text" name="username" size="30"/> </td>  
  •       </tr>  
  •       <tr>  
  •        <td><div align="right">Upload File1:</div></td>  
  •        <td><input type="file" name="file1" size="30"/> </td>  
  •       </tr>  
  •       <tr>  
  •         <td><div align="right">Upload File2:</div></td>  
  •         <td><input type="file" name="file2" size="30"/> </td>  
  •       </tr>  
  •       <tr>  
  •         <td><input type="submit" name="submit" value="upload"></td>  
  •         <td><input type="reset" name="reset" value="reset"></td>  
  •       </tr>  
  •     </table>  
  •   </form>  
  • </body>  
  • </html>  
  •  

     

    二、处理表单的Servlet——UploadServlet

     

    1. package mypack;  
    2.   
    3. import javax.servlet.*;  
  • import javax.servlet.http.*;  
  • import java.io.*;  
  • import java.util.*;  
  • import org.apache.commons.fileupload.*;  
  • import org.apache.commons.fileupload.servlet.*;  
  • import org.apache.commons.fileupload.disk.*;  
  •   
  • public class UploadServlet extends HttpServlet {  
  •   private String filePath; //存放上传文件的目录   
  •   private String tempFilePath; //存放临时文件的目录   
  •   
  •   public void init(ServletConfig config)throws ServletException {  
  •     super.init(config);  
  •     filePath=config.getInitParameter("filePath");  
  •     tempFilePath=config.getInitParameter("tempFilePath");  
  •     filePath=getServletContext().getRealPath(filePath);  
  •     tempFilePath=getServletContext().getRealPath(tempFilePath);  
  •   }  
  •   public void doPost(HttpServletRequest request,HttpServletResponse response)  
  •          throws ServletException, IOException {  
  •     response.setContentType("text/plain");  
  •     //向客户端发送响应正文   
  •     PrintWriter outNet=response.getWriter();   
  •     try{  
  •       //创建一个基于硬盘的FileItem工厂   
  •       DiskFileItemFactory factory = new DiskFileItemFactory();  
  •       //设置向硬盘写数据时所用的缓冲区的大小,此处为4K   
  •       factory.setSizeThreshold(4*1024);   
  •       //设置临时目录   
  •       factory.setRepository(new File(tempFilePath));  
  •   
  •       //创建一个文件上传处理器   
  •       ServletFileUpload upload = new ServletFileUpload(factory);  
  •       //设置允许上传的文件的最大尺寸,此处为4M   
  •       upload.setSizeMax(4*1024*1024);   
  •       
  •       List /* FileItem */ items = upload.parseRequest(request);      
  •   
  •       Iterator iter = items.iterator();  
  •       while (iter.hasNext()) {  
  •         FileItem item = (FileItem) iter.next();  
  •         if(item.isFormField()) {  
  •           processFormField(item,outNet); //处理普通的表单域   
  •         }else{  
  •           processUploadedFile(item,outNet); //处理上传文件   
  •         }  
  •       }  
  •       outNet.close();  
  •     }catch(Exception e){  
  •        throw new ServletException(e);  
  •     }  
  •   }  
  •   
  •   private void processFormField(FileItem item,PrintWriter outNet){  
  •     String name = item.getFieldName();  
  •     String value = item.getString();  
  •     outNet.println(name+":"+value+"/r/n");  
  •   }  
  •     
  •     
  •   private void processUploadedFile(FileItem item,PrintWriter outNet)throws Exception{  
  •     String filename=item.getName();  
  •     int index=filename.lastIndexOf("//");  
  •     filename=filename.substring(index+1,filename.length());  
  •     long fileSize=item.getSize();  
  •       
  •     if(filename.equals("") && fileSize==0)return;  
  •   
  •     File uploadedFile = new File(filePath+"/"+filename);  
  •     item.write(uploadedFile);  
  •     outNet.println(filename+" is saved.");  
  •     outNet.println("The size of " +filename+" is "+fileSize+"/r/n");  
  •   }  
  • }  
  • ServletWeb.xml中其配置为:

    1. <servlet>  
    2.     <servlet-name>upload</servlet-name>  

  •     <servlet-class>mypack.UploadServlet</servlet-class>  
  •     <init-param>  
  •       <param-name>filePath</param-name>  
  •       <param-value>store</param-value>  
  •     </init-param>  
  •     <init-param>  
  •       <param-name>tempFilePath</param-name>  
  •       <param-value>temp</param-value>  
  •     </init-param>  
  •   
  •   </servlet>  
  •   
  •   <servlet-mapping>  
  •     <servlet-name>upload</servlet-name>  
  •     <url-pattern>/upload</url-pattern>  
  •   </servlet-mapping>  
  •  

      到此已经完成一个简单的上传文件功能了——访问表单页面,选择文件后点击上传文件即可。如果想要在上传文件到服务器的同时,又要将文件保存到数据库中,可以在获取到文件名后,将文件名保存到数据库里,这样以后可以根据文件名把用户的文件选择出来!

      评论这张
     
    阅读(414)| 评论(0)
    推荐 转载

    历史上的今天

    在LOFTER的更多文章

    评论

    <#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
     
     
     
     
     
     
     
     
     
     
     
     
     
     

    页脚

    网易公司版权所有 ©1997-2017