Apache Commons fileUpload实现文件上传

    xiaoxiao2025-01-06  11

    原创作品,允许转载,转载时请务必以超链接形式标明文章  原始出处 、作者信息和本声明。否则将追究法律责任。 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.htmltype="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") public class Upload extends HttpServlet {     private String uploadPath = "D:\\temp"// 上传文件的目录     private String tempPath = "d:\\temp\\buffer\\"// 临时文件目录     File tempPathFile;       @SuppressWarnings("unchecked")     public void 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();        }     }       public void 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

    转载请注明原文地址: https://ju.6miu.com/read-1295209.html
    最新回复(0)