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>");

        }
    }
}

 

 

java中Commons-fileupload实现上传,布布扣,bubuko.com

java中Commons-fileupload实现上传

上一篇:python基础05 缩进与选择


下一篇:CSAPP笔记(第一章 计算机系统漫游)