zoukankan      html  css  js  c++  java
  • 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="<%=basePath%>">
    
            <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="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="上传" />    </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='index.jsp';</script>");
    
                            } else {
                                // 向jsp页面输出上传失败的信息
                                out.print("<script>alert('文件上传失败');location.href='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='index.jsp';</script>");
    
            }
        }
    }
  • 相关阅读:
    3089:爬楼梯
    7592:求最大公约数问题
    JVM中内存回收深入分析,各种垃圾收集器
    PKU 1064 Cable master
    【面试&笔试】ASP.NET的相关问题
    1027. Colors in Mars (20) PAT
    DB_WRITER_PROCESSES与LOG_ARCHIVE_MAX_PROCESSES
    fedora下体验gentoo安装
    一个整数数组里面,除了两个数之外,其他的数字都出现了两次,写一个程序找出这两个数
    [置顶] export命令-linux
  • 原文地址:https://www.cnblogs.com/kzhan/p/3790067.html
Copyright © 2011-2022 走看看