jsp上传文件案例(有源码)

来源:互联网 发布:gis基础软件平台 编辑:程序博客网 时间:2024/06/07 11:49

前言

这两天做上传的功能,趁着端午节的时间在家里做了一个上传的案例。今天写个博客记录一下!说明:    1.项目使用myeclipse开发工具    2.项目的源码的压缩格式是7z,可以下载一个7z压缩工具解压

知识点一:准备工作

 1.需要引入jar包---这里使用了apache的包     commons-fileupload-1.2.2.jar     commons-io-2.0.1.jar 2.前台使用的js文件---我使用的是ajax提交的表单     jquery-3.2.1.js     jquery.form.js
知识点二:项目中的知识点:
1. java操作文件知识2. java流相关知识3. ajax提交表单4. servlet知识5. filter知识

前台页面:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML ><html>  <head>    <base href="<%=basePath%>">   <!-- html 5 的编码设置方式 -->      <meta charset="UTF-8">      <title>上传demo</title>    <script type="text/javascript"  src="static/js/jquery-3.2.1.js"></script>    <script type="text/javascript" src="http://malsup.github.io/jquery.form.js"></script>    <!--    <link rel="stylesheet" type="text/css" href="styles.css">    -->    <script type="text/javascript">        $(function(){            //给 “使用ajax上传” 按钮绑定点击事件            $("#uploadButton").on("click",function(){                $("#uploatForm").ajaxSubmit({                    beforeSubmit:function(){//提交前调用                        //alert('准备提交表单了');                    },                    success:function(data){//成功调用                        //alert("提交成功了");                        if(typeof(data) == "string"){                            data = eval('(' + data + ')');;//将返回的json字符串转换为json对象                            alert(data.message);                        }                    }                });            });        });    </script>  </head>  <body>        <br>        <br>        <form action="upload" method="post" id="uploatForm" enctype="multipart/form-data">            <input type="file"  name="upload" /><span style="color:red;font-size:13px">不能超过4M</span>            <br>              <input type="submit" value="上传(请使用下面的ajax上传---同步上传也可以使用)" disabled="disabled"/>                <br>             <input type="button" value="使用ajax上传" id="uploadButton" >        </form>  </body></html>
后台代码:

一、servlet代码:

package cn.cupcat.controller;import java.io.File;import java.io.IOException;import java.sql.Timestamp;import java.text.SimpleDateFormat;import java.util.Iterator;import java.util.List;import java.util.UUID;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.FileUploadException;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;import cn.cupcat.util.UploadUtil;public class UploadController extends HttpServlet {    /**     *      */    private static final long serialVersionUID = 1L;    public static String uploadPath = "D:\\upload";    File repository;    @Override    protected void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        System.out.println("我进入了post方法!");        //返回客户端消息        String resultMessage = "";        DiskFileItemFactory fileFactory = new DiskFileItemFactory();        //设置缓冲区大小 这里是4KB (单位是B 字节)        fileFactory.setSizeThreshold(4096);        //设置缓存        fileFactory.setRepository(repository);        ServletFileUpload servletFileUpload = new ServletFileUpload(fileFactory);        //设置文件上传的大小这里是4M         servletFileUpload.setFileSizeMax(4194304);        try {            //得到上传文件列表            List<FileItem> fileItem = servletFileUpload.parseRequest(request);            Iterator<FileItem> iterator = fileItem.iterator();            //得到保存路径            File saveDir = UploadUtil.getSavePath(request);            while(iterator.hasNext()){                FileItem file = iterator.next();                if(file != null){                    String fileName = file.getName();                       if(fileName != null){                        //System.out.println("上传文件的没有转码的文件名为:"+fileName);                        //构建本地文件                        File saveFile = new File(saveDir,UploadUtil.getSaveFileName(fileName));                        file.write(saveFile);                        resultMessage = UploadUtil.getResponseResult(200, "上传成功!");                    }else{                        System.out.println("上传失败!");                        resultMessage = UploadUtil.getResponseResult(300, "请选择上传文件,上传失败!");                    }                }            }            System.out.println("文件上传结束 !");        } catch (FileUploadException e) {            resultMessage = UploadUtil.getResponseResult(300, "文件上传错误,上传失败!");            e.printStackTrace();        } catch (Exception e) {            e.printStackTrace();            resultMessage = UploadUtil.getResponseResult(300, "文件上传错误,上传失败!");        }        response.getWriter().print(resultMessage);//返回客户端 resultMessage    }    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp)            throws ServletException, IOException {        this.doPost(req, resp);    }}

二、filter代码:—主要作用是设置编码

package cn.cupcat.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class UnicodeFilter implements Filter{    @Override    public void destroy() {    }    @Override    public void doFilter(ServletRequest arg0, ServletResponse arg1,            FilterChain arg2) throws IOException, ServletException {        if(arg0 instanceof HttpServletRequest){            System.out.println("进入了过滤器");            HttpServletRequest request = (HttpServletRequest)arg0;            request.setCharacterEncoding("UTF-8"); //设置编码,防止后台得到中文乱码        }        if (arg1 instanceof HttpServletResponse){            HttpServletResponse response = (HttpServletResponse)arg1;            response.setCharacterEncoding("UTF-8");//设置编码,防止返回客户端乱码        }        arg2.doFilter(arg0, arg1);    }    @Override    public void init(FilterConfig arg0) throws ServletException {    }}

工具类:

package cn.cupcat.util;import java.io.File;import java.sql.Timestamp;import java.text.SimpleDateFormat;import java.util.UUID;import javax.servlet.http.HttpServletRequest;public class UploadUtil {    // 产生32位UUID    public static String getUUID32() {        return UUID.randomUUID().toString().replace("-", "");    }    // 获得服务器存储文件名,格式为: 32位UUID+"_"+ fileName    public static String getSaveFileName(String fileName) {        if (fileName != null && fileName.length() > 0)            return getUUID32() + "_" + fileName;        return "";    }    // 获得上传保存路径  -----这里是模拟的    public static File getSavePath(HttpServletRequest request) {        String date = formatDate(new Timestamp(System.currentTimeMillis()),                "yyyyMMdd");// 当前日期        String moduls = "upload";// 模块名(这里假设模块名为:upload)        String username = "A12346579";// 用户名(这里模拟用户名为:A12346579)        String relativePath = File.separatorChar + "WEB-INF"                + File.separatorChar + "attachment" + File.separatorChar                + moduls + File.separatorChar + username + File.separatorChar                + date; //        String absolutePath = request.getSession().getServletContext()                .getRealPath(relativePath);        File dir = new File(absolutePath);        if (!dir.exists())// 如果文件家不存在,就创建            dir.mkdirs();        return dir;    }    // 格式化时间    public static String formatDate(Timestamp timestamp, String format) {        return new SimpleDateFormat(format).format(timestamp);    }    //这里为了简单,没有引入处理json的包,这是模拟json数据    public static String getResponseResult(int status,String message){        return  "{status: "+status+",message: '"+message+"'}";    }}

web.xml文件代码:

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">  <display-name>upload_demo</display-name><!--   上传servlet开始 -->  <servlet>        <servlet-name>upload</servlet-name>        <servlet-class>cn.cupcat.controller.UploadController</servlet-class>  </servlet>  <servlet-mapping>        <servlet-name>upload</servlet-name>        <url-pattern>/upload</url-pattern>  </servlet-mapping>  <!--   上传servlet结束 -->  <filter>        <filter-name>unicode</filter-name>        <filter-class>cn.cupcat.filter.UnicodeFilter</filter-class>  </filter>  <filter-mapping>        <filter-name>unicode</filter-name>        <!--  这里指定filter只对servlet的name为upload生效  -->            <servlet-name>upload</servlet-name>   </filter-mapping>  <welcome-file-list>    <welcome-file>index.html</welcome-file>    <welcome-file>index.htm</welcome-file>    <welcome-file>index.jsp</welcome-file>    <welcome-file>default.html</welcome-file>    <welcome-file>default.htm</welcome-file>    <welcome-file>default.jsp</welcome-file>  </welcome-file-list></web-app>

知识点三:项目中的注意点:

1.项目中为了简单,没有使用json的工具类,而是而是自己写的字符串返回客户端2.项目中上传文章的存放路径问题,请看UploadUtil.java中的方法

知识点四:文件的源码

文件的下载地址:http://download.csdn.net/detail/xinghuo0007/9855550

说明:如果有什么不足的地方,大家可以一起交流!

原创粉丝点击