commons-fileupload.jar实现文件上传

it2025-02-28  18

  标签: uploadfileimportexceptionstringmyeclipse  分类: 好东东(2)   Java(2)  原创作品,允许转载,转载时请务必以超链接形式标明文章  原始出处 、作者信息和本声明。否则将追究法律责任。 http://zhangjunhd.blog.51cto.com/113473/18331 Apache的commons-fileupload.jar可方便的实现文件的上传功能,本文通过实例来介绍如何使用commons-fileupload.jar。 @author:ZJ 07-2-22 Blog:  [url]http://zhangjunhd.blog.51cto.com/[/url]     将Apache的commons-fileupload.jar放在应用程序的WEB-INF\lib下,即可使用。下面举例介绍如何使用它的文件上传功能。 所使用的fileUpload版本为1.2,环境为Eclipse3.3+MyEclipse6.0。FileUpload 是基于 Commons IO的,所以在进入项目前先确定Commons IO的jar包(本文使用 commons-io-1.3.2.jar)在WEB-INF\lib下。 此文作示例工程可在文章最后的附件中下载。 示例1 最简单的例子,通过ServletFileUpload静态类来解析Request,工厂类FileItemFactory会对mulipart类的表单中的所有字段进行处理,不只是file字段。getName()得到文件名,getString()得到表单数据内容,isFormField()可判断是否为普通的表单项。 demo1.html <html> <head> <meta http-equiv="Content-Type"  content="text/html; charset=GB18030"> <title>File upload</title> </head> <body>        //必须是multipart的表单数据。 <form name="myform"  action="demo1.jsp" method="post" enctype="multipart/form-data"> Your name: <br> <input type="text"  name="name" size="15"><br> File:<br> <input type="file"  name="myfile"><br> <br> <input type="submit"  name="submit" value="Commit"> </form> </body> </html> demo1.jsp <%@  page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <%@  page import="org.apache.commons.fileupload.*"%> <%@  page import="org.apache.commons.fileupload.servlet.*"%> <%@  page import="org.apache.commons.fileupload.disk.*"%> <%@  page import="java.util.*"%>   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <% boolean isMultipart = ServletFileUpload.isMultipartContent(request);//检查输入请求是否为multipart表单数据。 if (isMultipart ==  true) { FileItemFactory factory =  new DiskFileItemFactory();//为该请求创建一个DiskFileItemFactory对象,通过它来解析请求。执行解析后,所有的表单项目都保存在一个List中。 ServletFileUpload upload =  new  ServletFileUpload(factory); List<FileItem> items =  upload.parseRequest(request); Iterator<FileItem> itr =  items.iterator(); while (itr.hasNext()) { FileItem item = (FileItem)  itr.next(); //检查当前项目是普通表单项目还是上传文件。 if (item.isFormField()) {//如果是普通表单项目,显示表单内容。 String fieldName = item.getFieldName(); if (fieldName.equals("name")) //对应demo1.html中type="text"  name="name" out.print("the field name is" +  item.getString());//显示表单内容。 out.print("<br>"); }  else {//如果是上传文件,显示文件名。 out.print("the upload file name is" + item.getName()); out.print("<br>"); } } }  else { out.print("the enctype must be multipart/form-data"); } %> <html> <head> <meta http-equiv="Content-Type"  content="text/html; charset=GB18030"> <title>File upload</title> </head> <body> </body> </html> 结果: the field name isjeff  the upload file name isD:\C语言考试样题\作业题.rar 示例2 上传两个文件到指定的目录。 demo2.html <html> <head> <meta http-equiv="Content-Type"  content="text/html; charset=GB18030"> <title>File upload</title> </head> <body> <form name="myform"  action="demo2.jsp" method="post" enctype="multipart/form-data"> File1:<br> <input type="file"  name="myfile"><br> File2:<br> <input type="file"  name="myfile"><br> <br> <input type="submit"  name="submit" value="Commit"> </form> </body> </html>   demo2.jsp <%@  page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <%@  page import="org.apache.commons.fileupload.*"%> <%@  page import="org.apache.commons.fileupload.servlet.*"%> <%@  page import="org.apache.commons.fileupload.disk.*"%> <%@  page import="java.util.*"%> <%@  page import="java.io.*"%>   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <%String uploadPath="D:\\temp"; boolean isMultipart = ServletFileUpload.isMultipartContent(request); if(isMultipart== true){    try{      FileItemFactory factory =  new DiskFileItemFactory();      ServletFileUpload upload =  new ServletFileUpload(factory);      List<FileItem> items = upload.parseRequest(request);//得到所有的文件     Iterator<FileItem> itr = items.iterator();      while(itr.hasNext()){//依次处理每个文件    FileItem item=(FileItem)itr.next();    String fileName=item.getName();//获得文件名,包括路径     if(fileName!= null){    File fullFile= new File(item.getName());    File savedFile= new File(uploadPath,fullFile.getName());    item.write(savedFile);    }      }      out.print("upload succeed");   }    catch(Exception e){    e.printStackTrace();   } } else{    out.println("the  enctype must be multipart/form-data"); } %> <html> <head> <meta http-equiv="Content-Type"  content="text/html; charset=GB18030"> <title>File upload</title> </head> <body> </body> </html> 结果: upload succeed 此时,在"D:\temp"下可以看到你上传的两个文件。 示例3 上传一个文件到指定的目录,并限定文件大小。 demo3.html <html> <head> <meta http-equiv="Content-Type"  content="text/html; charset=GB18030"> <title>File upload</title> </head> <body> <form name="myform"  action="demo3.jsp" method="post" enctype="multipart/form-data"> File:<br> <input type="file"  name="myfile"><br> <br> <input type="submit"  name="submit" value="Commit"> </form> </body> </html>   demo3.jsp <%@  page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <%@  page import="org.apache.commons.fileupload.*"%> <%@  page import="org.apache.commons.fileupload.servlet.*"%> <%@  page import="org.apache.commons.fileupload.disk.*"%> <%@  page import="java.util.*"%> <%@  page import="java.io.*"%>   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <% File uploadPath =  new File("D:\\temp");//上传文件目录 if (!uploadPath.exists()) { uploadPath.mkdirs(); } // 临时文件目录 File tempPathFile =  new File("d:\\temp\\buffer\\"); if (!tempPathFile.exists()) { tempPathFile.mkdirs(); } try { // Create a factory for disk-based file items DiskFileItemFactory factory =  new  DiskFileItemFactory();   // Set factory constraints factory.setSizeThreshold(4096); // 设置缓冲区大小,这里是4kb factory.setRepository(tempPathFile);//设置缓冲区目录   // Create a new file upload handler ServletFileUpload upload =  new  ServletFileUpload(factory);   // Set overall request size constraint upload.setSizeMax(4194304); // 设置最大文件尺寸,这里是4MB   List<FileItem> items = upload.parseRequest(request);//得到所有的文件 Iterator<FileItem> i =  items.iterator(); while (i.hasNext()) { FileItem fi = (FileItem) i.next(); String fileName = fi.getName(); if (fileName !=  null) { File fullFile =  new  File(fi.getName()); File savedFile =  new File(uploadPath,  fullFile .getName()); fi.write(savedFile); } } out.print("upload succeed"); }  catch (Exception e) { e.printStackTrace(); } %> <html> <head> <meta http-equiv="Content-Type"  content="text/html; charset=GB18030"> <title>File upload</title> </head> <body> </body> </html> 示例4 利用Servlet来实现文件上传。 Upload.java package 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;   import org.apache.commons.fileupload.FileItem; import  org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload;   @SuppressWarnings("serial") publicclass Upload  extends HttpServlet { private String uploadPath = "D:\\temp"; // 上传文件的目录 private String tempPath = "d:\\temp\\buffer\\"; // 临时文件目录 File tempPathFile;   @SuppressWarnings("unchecked") publicvoid doPost(HttpServletRequest  request, HttpServletResponse response) throws IOException,  ServletException { try { // Create a factory for disk-based file items DiskFileItemFactory factory =  new DiskFileItemFactory();   // Set factory constraints factory.setSizeThreshold(4096); // 设置缓冲区大小,这里是4kb factory.setRepository(tempPathFile);// 设置缓冲区目录   // Create a new file upload handler ServletFileUpload upload =  new  ServletFileUpload(factory);   // Set overall request size constraint upload.setSizeMax(4194304); // 设置最大文件尺寸,这里是4MB   List<FileItem> items =  upload.parseRequest(request);// 得到所有的文件 Iterator<FileItem> i =  items.iterator(); while (i.hasNext()) { FileItem fi = (FileItem)  i.next(); String fileName = fi.getName(); if (fileName !=  null) { File fullFile =  new  File(fi.getName()); File savedFile =  new File(uploadPath,  fullFile.getName()); fi.write(savedFile); } } System. out.print("upload succeed"); }  catch (Exception e) { // 可以跳转出错页面 e.printStackTrace(); } }   publicvoid init()  throws  ServletException { File uploadFile =  new File(uploadPath); if (!uploadFile.exists()) { uploadFile.mkdirs(); } File tempPathFile =  new File(tempPath);      if  (!tempPathFile.exists()) { tempPathFile.mkdirs(); } } }   demo4.html <html> <head> <meta http-equiv="Content-Type"  content="text/html; charset=GB18030"> <title>File upload</title> </head> <body> //  action="fileupload"对应web.xml中<servlet-mapping>中<url-pattern>的设置. <form name="myform"  action="fileupload" method="post" enctype="multipart/form-data"> File:<br> <input type="file"  name="myfile"><br> <br> <input type="submit"  name="submit" value="Commit"> </form> </body> </html>   web.xml <servlet> <servlet-name>Upload</servlet-name> <servlet-class>com.zj.sample.Upload</servlet-class> </servlet>   <servlet-mapping> <servlet-name>Upload</servlet-name> <url-pattern>/fileupload</url-pattern> </servlet-mapping>

本文出自 “子 孑” 博客,请务必保留此出处http://zhangjunhd.blog.51cto.com/113473/18331

 

自己根据上面包装了一下 ,把文件上传放入一个FileUpload类的静态方法upload中,方法的形式参数则为HttpServletRequest request和String uploadPath(上传到服务器的路径)

代码如下:

1、FileUpload类

 

[java]  view plain  copy    print? /*  * FileUpload  * @Author TGM  */  package com.FileUpload;    import java.io.File;  import java.util.Iterator;  import java.util.List;  import java.util.logging.Level;  import java.util.logging.Logger;  import javax.servlet.http.HttpServletRequest;  import org.apache.commons.fileupload.FileItem;  import org.apache.commons.fileupload.FileItemFactory;  import org.apache.commons.fileupload.FileUploadException;  import org.apache.commons.fileupload.disk.DiskFileItemFactory;  import org.apache.commons.fileupload.servlet.ServletFileUpload;    /**  *  * @author TGM  */  public class FileUpload {      /**      * 静态上传方法      * @param request HttpServletRequest      * @param uploadPath String 上传到服务器的文件存放路径      * @return true 上传成功 false 上传失败      */      public static boolean upload(HttpServletRequest request, String uploadPath) {          boolean isMultipart = ServletFileUpload.isMultipartContent(request);//检查输入请求是否为multipart表单数据。          boolean flag = false;          if (isMultipart == true) {                FileItemFactory factory = new DiskFileItemFactory();//为该请求创建一个DiskFileItemFactory对象,通过它来解析请求。执行解析后,所有的表单项目都保存在一个List中。              ServletFileUpload upload = new ServletFileUpload(factory);              List<FileItem> items = null;                            try {                  items = upload.parseRequest(request);              } catch (FileUploadException ex) {                  Logger.getLogger(FileUpload.class.getName()).log(Level.SEVERE, null, ex);              }                Iterator<FileItem> itr = items.iterator();              while (itr.hasNext()) {                    FileItem item = (FileItem) itr.next();                  //检查当前项目是普通表单项目还是上传文件。                  if (item.isFormField()) {//如果是普通表单项目,显示表单内容。                        String fieldName = item.getFieldName();                      if (fieldName.equals("name")) {//对应demo1.html中type="text" name="name"                          System.out.print("the field name is" + item.getString() + "\n");//显示表单内容。                      }                  } else {//如果是上传文件,显示文件名。                      File fullFile = new File(item.getName());                      File savedFile = new File(uploadPath, fullFile.getName());                      try {                          item.write(savedFile);                        } catch (Exception ex) {                          Logger.getLogger(FileUpload.class.getName()).log(Level.SEVERE, null, ex);                      }                      flag = true;                      System.out.print("the upload file name is" + item.getName() + "\n");                  }              }          } else {              System.out.print("the enctype must be multipart/form-data");          }          return flag;      }  }  

2、index.html(上传表单)

[html]  view plain  copy    print? <!--  To change this template, choose Tools | Templates  and open the template in the editor.  -->  <!DOCTYPE html>  <html>  <head>      <meta http-equiv="Content-Type" content="text/html; charset=GB18030">      <title>File upload</title>  </head>  <body>      <form name="myform" action="doUpload2.jsp" method="post"         enctype="multipart/form-data">         Your name: <br>         <input type="text" name="name" size="15"><br>         File2:<br>         <input type="file" name="myfile1"><br>         File2:<br>         <input type="file" name="myfile2"><br>         <br>         <input type="submit" name="submit" value="Commit">      </form>  </body>  </html>  

3、doUpload2.jsp 接收处理页面

[plain]  view plain  copy    print? <%--       Document   : doUpload2      Created on : 2012-9-6, 19:24:20      Author     : TGM  --%>    <%@page import="com.FileUpload.FileUpload"%>  <%@page contentType="text/html" pageEncoding="UTF-8"%>  <!DOCTYPE html>  <html>      <head>          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">          <title>JSP Page</title>      </head>      <body>          <%              boolean isUp = FileUpload.upload(request, "D:\\");              if(isUp){                  out.write("上传成功!");              } else {                  out.write("上传失败!");              }          %>      </body>  </html>  

commons-fileupload.jar commons-io.jar下载,请猛点!在打开的页面中Search

转载于:https://www.cnblogs.com/w-wfy/p/6239350.html

相关资源:上传文件的jar包 commons-io commons-fileupload.jar
最新回复(0)