首页 > 代码库 > java中Commons-fileupload实现上传

java中Commons-fileupload实现上传

 

java中Commons-fileupload组件实现上传

 

 

在实现功能之前需要导入两个jar文件,分别是 commons-fileupload-1.3.1.jar commons-io.jar 文件,这里就不提供链接,网上搜索都有可以自行下载。

----------------------------------------------------jsp页面-----------------------------------------------------

第一步:先上传一个简单的jsp页面 ,在上jsp页面之前需要说的问题是:需要在jsp页面导入类库:<%@ page import="org.apache.commons.fileupload.*"%>

 

接下来来一个简单的form表单的jsp页面的代码,用于界面上传:

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ page import="org.apache.commons.fileupload.*"%><!-- 导入类库 --><%    String path = request.getContextPath();    String basePath = request.getScheme() + "://"            + request.getServerName() + ":" + request.getServerPort()            + path + "/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>    <head>        <base href="http://www.mamicode.com/">        <title>文件上传</title>        <meta http-equiv="pragma" content="no-cache">        <meta http-equiv="cache-control" content="no-cache">        <meta http-equiv="expires" content="0">        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">        <meta http-equiv="description" content="This is my page">        <!--    <link rel="stylesheet" type="text/css" href="http://www.mamicode.com/styles.css">    -->    </head>    <body>        <h2>            使用commons-fileupload上传文件        </h2>        <hr />        <form action="CommonsFileuploadServlet02" method="post"            enctype="multipart/form-data">            <table>                <tr>                    <td>上传的用户</td>                    <td><input type="text" name="uesr" size="20" /></td>                </tr>                <tr>                    <td>请选择要上传的文件</td>                    <td><input type="file" name="filepath" size="20" /></td>                </tr>                                <tr>                    <td><input type="submit" value="http://www.mamicode.com/上传" />    </td>                </tr>            </table>        </form>    </body></html>

 

 

 

 

-----------------------------------------------CommonsFileuploadServlet.java逻辑处理文件------------------------------------------

 

 第二部份内容是form表单请求的Servlet文件:CommonsFileuploadServlet.java

 注意看doPost内部的方法:

package cn.jbit.servlet;import java.io.File;import java.io.IOException;import java.io.PrintWriter;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.DiskFileUpload;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;public class CommonsFileuploadServlet extends HttpServlet {    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        doPost(request, response);    }    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        request.setCharacterEncoding("UTF-8");// 输入防止中文乱码        response.setContentType("text/html;charset=UTF-8");// 输出防止中文乱码        PrintWriter out = response.getWriter();        String show = "文件上传成功";                // 上传的文件名        String uploadfileName = "";        // 表单元素的name属性值        String filename = "";        // 1.请求信息是否为multipart/form-data类型        boolean isMultipart = ServletFileUpload.isMultipartContent(request);        // 2.设置上传文件的存储路径,注意这里获取的是tomcat服务下当前项目下的目录文件        /*         * String uploadFilePath = request.getSession().getServletContext()         * .getRealPath("");         */        /**         * 这里我们可以根据自己的需求自定义路径         */        String uploadFilePath = "D:/";        // 判断如果是multipart/form-data类型        if (isMultipart) {            // 创建file工厂            FileItemFactory factory = new DiskFileItemFactory();            // ServletFileUpload对象的创建需要依赖FileItemFactory工厂            ServletFileUpload upload = new ServletFileUpload(factory);            /**             * 当然,这里我们也可以这么写 ServletFileUpload upload = new             * ServletFileUpload(new DiskFileItemFactory());             * //简化了创建FileItemFactory工厂实例             */            // 设置转换时使用的字符编码集            upload.setHeaderEncoding("UTF-8");            /**             * 在这里建议: request.setCharacterEncoding("UTF-8");// 输入防止中文乱码             * response.setContentType("text/html;charset=UTF-8");//输出防止中文乱码             * upload.setHeaderEncoding("UTF-8"); 这三句防止乱码的操作都加上!保险!!             *              */            try {                // 这里创建FileItem集合对象,用户接收ServletFileUpload                // 对象的parseRequest()方法所返回的值                List<FileItem> fileList = upload.parseRequest(request);                Iterator<FileItem> iterator = fileList.iterator();                while (iterator.hasNext()) { // 依次处理每个文件                    // 循环获取FileItem对象实例                    FileItem item = iterator.next();                    /*                     * isFormField()方法的意思是根据表单内的字段类型返回不同的结果,如果得到的是普通字段的类型则返回true,                     * 如果是文件字段则返回false                     */                    if (item.isFormField()) { // 这里获取的是提交的form表单内的普通字段、如text、password等                        filename = item.getFieldName(); // 表单字段的name属性值                                                        // ,注意是name属性的值,而不是对应value的值,这一点需要明白                        System.out.println("---------------" + filename); // 打印                    } else {// 否则获取文件字段                        String filedname = item.getName(); // 获取上传文件的全路径字符串                        System.out.println("--------------" + filedname); // 打印测试                                                                        // 判断是否不等于空                        if (filedname != null && !filedname.equals("")) {                            // 创建file对象,保存输入的文件路径(需要上传的文件是从哪个路径下传过来的)                            File fullFile = new File(filedname);                            System.out.println("-----------fullFile----------"                                    + fullFile); // 打印测试,看看此时的fullFile是什么                            // 这里通过File对象的getName()方法从路径中获取上传的文件名称,然后把文件名和新的路径(需要将上传文件传到哪里的路径)进行拼接,结合,从而形成一个新的路径                            File savefile = new File(uploadFilePath, fullFile                                    .getName());                            System.out.println("-----------savefile----------"                                    + savefile); // 打印测试将要讲文件传入哪里的全路径                            // 通过FileItem对象的write()方法保存的主体内容到指定的文件路径中                            item.write(savefile);                            // 获取上传的文件名称                            uploadfileName = savefile.getName();                            // 向jsp页面输出上传成功的信息                            out.print("<script>alert( " + "‘" + uploadfileName                                    + show + "‘"                                    + ");location.href=http://www.mamicode.com/‘index.jsp‘;</script>");                        } else {                            // 向jsp页面输出上传失败的信息                            out.print("<script>alert(‘文件上传失败‘);location.href=http://www.mamicode.com/‘index.jsp‘;</script>");                        }                    }                }            } catch (FileUploadException e) {                // TODO Auto-generated catch block                e.printStackTrace();            } catch (Exception e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        } else {            out                    .print("<script>alert(‘系统内部错误‘);location.href=http://www.mamicode.com/‘index.jsp‘;</script>");        }    }}