JSP上传文件

 

下面网址Apache官方网站的资源下载,本次我们需要用到以下两个架包

Commons IO
http://commons.apache.org/proper/commons-io/download_io.cgi

FileUpload
http://commons.apache.org/proper/commons-fileupload/download_fileupload.cgi

可以根据自己电脑当前的环境配置选择下载合适的架包版本,有些版本不兼容以前的JDK

注意我们下载的是Binaries的压缩包

解压后可以得到一下文件

我们选择上面三个架包按下Ctrl+C,再将架包粘贴到我们JSP项目的WEB-IN/lib下面

下面代码都已经经过实际测试,运行环境Tomcat9.0,编译环境JDK12,编写环境IntelliJ IDEA 2019.1.3 x64,浏览器为360极速浏览器

在项目下面建立一个用于提交选择文件的页面 index.jsp

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<html>
  <head>
    <title>文件上传</title>
  </head>
  <body>
    <form action="do_upload.jsp" enctype="multipart/form-data" method="post">
      用户名:<input name="username" type="text"><br>

<%--      multiple="multiple" 用于一次提交多个文件,不加那么就是只能选择一个文件--%>
      <input type="file" name="image">
      <input type="submit" value="提交">
    </form>
  </body>
</html>

然后我们建立一个上传的do_upload.jsp文件

<%@ page import="java.util.List" %>
<%@ page import="java.io.File" %>
<%@ page import="org.apache.commons.fileupload.FileItemFactory" %>
<%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory" %>
<%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload" %>
<%@ page import="org.apache.commons.fileupload.FileItem" %>
<%@ page import="org.apache.commons.fileupload.FileUploadException" %>
<%@ page import="java.util.Arrays" %>
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<%
    request.setCharacterEncoding("utf-8");

    // 创建FileItemFactory工厂,用于创建ServletFileUpload对象;
    FileItemFactory factory = new DiskFileItemFactory();

    //创建ServletFileUpload对象,文件操作对象
    //实现文件上传操作
    ServletFileUpload sfu = new ServletFileUpload(factory);

    // 控制文件上传的大小,请注意文件大小的单位是以b计算的
    sfu.setSizeMax(5*1024*1024);

    try{
    //判断表单的enctype是multipart/form-dat,判断请求信息中的内容是否为multipart类型
    if(ServletFileUpload.isMultipartContent(request)) {
        try {
            //获取表单form中所有的字段
            List<FileItem> itemList = sfu.parseRequest(request);

            // 遍历所有的字段
            for (FileItem item : itemList) {
                // 判断是否为普通表单字段,还是文件上传字段
                if (item.isFormField()) {
                    // 获取普通表单字段的name值
                    String name = item.getFieldName();
                    if ("username".equals(name)) {
                        //普通字段的name值为user
                        //获取该表单中(input框)中的值
                        String value = item.getString("UTF-8");
                        out.print(value + "上传了文件");
                    }
                } else {
                    //不是普通的字段,那么就是文件字段
                    // 上传多个文件的时候,自然而然就会进入这里提交文件
                    //获取上传的文件名字
                    String fileName = item.getName();

                    //设置图片的类型,文件上传的类型
                    List<String> fileType = Arrays.asList("gif", "bmp", "jpg");

                    //获得文件后缀名,为什么从后面开始找,因为防止有些用户使用“.”作为文件名
                    // 但是最后面的点一定是文件的真实类型
                    String ext = fileName.substring(fileName.lastIndexOf(".") + 1);

                    // 判断ext是否属于fileType里面的一个类型
                    if (!fileType.contains(ext)) {
                        out.print("上传失败,请检查文件类型");
                    } else {
                        //使用application的getRealPath()方法来获取相对路径的绝对位置
                        // 注意相对路径的文件或者文件夹位置一定是要存在的,不然就会报错
                        String path = application.getRealPath("/web/img");

                        // 输出相对路径的绝对路径
                        out.print("相对路径/web/img的绝对路径为:" + path);

                        // 控制文件上传的文件名
                        // 当前时间+五位随机数+文件后缀名
                        // DateOut.getNowTimeRegulationFileName()是我自己编写的方法,用于返回当前时间的字符串里面不包含“:”
                        fileName = (((int)(Math.random() * 90000))+10000)+"."+ext;

                        // 写入文件就需要文件对象
                        // 让file指向这个文件
                        File file = new File(path + "/" + fileName);

                        // 将文件写入到文件夹中
                        try {
                            // 防止文件不存在,导致异常
                            item.write(file);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        out.print("<br>文件上传成功");
                        out.print("<br><img src='web/img/" + fileName + "' alt='img'");
                    }
                }
            }
        } catch (FileUploadException e) {
            e.printStackTrace();
        }
    }
    }catch(Exception ignored){
        out.print("建议上传"+sfu.getSizeMax()+"一下的文件");
    }
%>

然后运行后上传便可以了。

发布了28 篇原创文章 · 获赞 2 · 访问量 940

猜你喜欢

转载自blog.csdn.net/TanGuozheng_Java/article/details/100596951
今日推荐