Servlet+Jsp实现图片或文件的上传功能具体思路及代码

一、上传功能的实现思路

实现上传文件功能的主要思路是:在前端页面添加上传文件的表单,使用Servlet技术获取表单数据和上传的文件,将文件存储到本地磁盘或数据库中。

具体实现步骤:

  1. 在前端页面中添加上传文件的表单,并设置form的enctype属性为"multipart/form-data",以支持文件上传。

  2. 创建处理上传请求的Servlet,继承HttpServlet,重写doPost()方法,并使用apache的FileUpload组件处理上传的文件。

  3. 将上传的文件写入到本地磁盘或存储到数据库中。

二、示例1:上传图片文件功能实现

下面是以上传图片文件为例,实现文件上传功能的具体步骤:

  1. 在前端页面中添加表单,设置enctype属性为multipart/form-data
<form method="post" action="UploadServlet" enctype="multipart/form-data">
    <input type="file" name="file"/>
    <input type="submit" value="上传文件" />
</form>
  1. 创建处理上传请求的Servlet,使用apache的FileUpload组件处理上传的文件。
@WebServlet("/UploadServlet")
public class UploadServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取上传文件的保存地址
        String savePath = this.getServletContext().getRealPath("/upload");
        // 检查目录是否存在,如果不存在则创建
        File file = new File(savePath);
        if(!file.exists() && !file.isDirectory()) {
            file.mkdir();
        }
        // 创建DiskFileItemFactory工厂对象
        DiskFileItemFactory factory = new DiskFileItemFactory();
        factory.setSizeThreshold(1024 * 1024); // 设置缓冲区大小
        factory.setRepository(file); // 设置文件临时存储目录

        // 创建ServletFileUpload对象,并设置上传文件的大小限制
        ServletFileUpload upload = new ServletFileUpload(factory);
        upload.setSizeMax(10 * 1024 * 1024); // 设置上传文件的大小限制为10M

        try {
            // 解析request对象,并获取上传文件集合
            List<FileItem> items = upload.parseRequest(request);
            for(FileItem item : items) {
                // 判断当前item是否是上传文件
                if(!item.isFormField()) {
                    // 获取上传文件名
                    String fileName = item.getName();
                    // 将上传文件保存到指定目录
                    item.write(new File(savePath, fileName));
                }
            }

            // 跳转到上传成功页面
            request.getRequestDispatcher("/success.jsp").forward(request, response);

        } catch (Exception e) {
            e.printStackTrace();
            // 跳转到上传失败页面
            request.getRequestDispatcher("/error.jsp").forward(request, response);
        }
    }
}
  1. 在指定目录下查看上传的图片文件,代码如下:
@WebServlet("/ShowImageServlet")
public class ShowImageServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取上传文件的保存地址
        String savePath = this.getServletContext().getRealPath("/upload");
        String fileName = request.getParameter("fileName"); // 获取要查看的图片文件名
        // 读取本地磁盘上的图片文件
        File file = new File(savePath + File.separator + fileName);
        if(file.exists()) {
            // 设置响应头,输出图片到页面中
            response.setContentType("image/png");
            FileInputStream inputStream = new FileInputStream(file);
            OutputStream outputStream = response.getOutputStream();
            byte[] buffer = new byte[1024];
            int length = 0;
            while((length = inputStream.read(buffer)) > 0) {
                outputStream.write(buffer, 0, length);
            }
            inputStream.close();
            outputStream.close();
        }
    }
}
  1. 在JSP页面中展示上传的图片文件,代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.io.File" %>
<%@ page import="java.util.Arrays" %>
<%@ page import="java.util.Collections" %>
<%@ page import="java.util.List" %>

<html>
<head>
    <title>上传成功</title>
</head>
<body>
    <h3>上传成功</h3>
    <% String savePath = request.getServletContext().getRealPath("/upload");
       File file = new File(savePath);
       List<String> fileNameList = Arrays.asList(file.list());
       Collections.reverse(fileNameList); // 将文件列表倒序排列
       for(String fileName : fileNameList) {
           if(fileName.endsWith(".png") || fileName.endsWith(".jpg")) { %>
             <img src="ShowImageServlet?fileName=<%= fileName%>" />
    <%     }
       } %>
</body>
</html>

以上代码实现了上传图片文件的功能,用户在前端页面选择图片文件并上传,上传成功后在jsp页面中展示上传的图片,并通过ShowImageServlet显示图片文件。

三、示例2:上传普通文件实现

以下是以上传普通文件为例,实现文件上传的代码:

  1. 在前端页面中添加表单,设置enctype属性为multipart/form-data
<form method="post" action="UploadServlet" enctype="multipart/form-data">
    <input type="file" name="file"/>
    <input type="submit" value="上传文件" />
</form>
  1. 创建处理上传请求的Servlet,使用apache的FileUpload组件处理上传的文件。
@WebServlet("/UploadServlet")
public class UploadServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取上传文件的保存地址
        String savePath = this.getServletContext().getRealPath("/upload");
        // 检查目录是否存在,如果不存在则创建
        File file = new File(savePath);
        if(!file.exists() && !file.isDirectory()) {
            file.mkdir();
        }
        // 创建DiskFileItemFactory工厂对象
        DiskFileItemFactory factory = new DiskFileItemFactory();
        factory.setSizeThreshold(1024 * 1024); // 设置缓冲区大小
        factory.setRepository(file); // 设置文件临时存储目录

        // 创建ServletFileUpload对象,并设置上传文件的大小限制
        ServletFileUpload upload = new ServletFileUpload(factory);
        upload.setSizeMax(10 * 1024 * 1024); // 设置上传文件的大小限制为10M

        try {
            // 解析request对象,并获取上传文件集合
            List<FileItem> items = upload.parseRequest(request);
            for(FileItem item : items) {
                // 判断当前item是否是上传文件
                if(!item.isFormField()) {
                    // 获取上传文件名
                    String fileName = item.getName();
                    // 将上传文件保存到指定目录
                    item.write(new File(savePath, fileName));
                }
            }

            // 跳转到上传成功页面
            request.getRequestDispatcher("/success.jsp").forward(request, response);

        } catch (Exception e) {
            e.printStackTrace();
            // 跳转到上传失败页面
            request.getRequestDispatcher("/error.jsp").forward(request, response);
        }
    }
}
  1. 在jsp页面中展示上传的文件,代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.io.File" %>
<%@ page import="java.util.Arrays" %>
<%@ page import="java.util.Collections" %>
<%@ page import="java.util.List" %>

<html>
<head>
    <title>上传成功</title>
</head>
<body>
    <h3>上传成功</h3>
    <% String savePath = request.getServletContext().getRealPath("/upload");
       File file = new File(savePath);
       List<String> fileNameList = Arrays.asList(file.list());
       Collections.reverse(fileNameList); // 将文件列表倒序排列
       for(String fileName : fileNameList) {
           if(!fileName.endsWith(".png") && !fileName.endsWith(".jpg")) { %>
             <p>文件名:<%= fileName %></p>
    <%     }
       } %>
</body>
</html>

以上代码实现了上传普通文件的功能,用户在前端页面选择文件并上传,上传成功后在jsp页面中展示上传的文件名称。

总结:

通过以上两个示例,我们可以实现文件上传功能的代码实现,共同点是都需要用到apache的FileUpload组件来处理上传的文件,不同之处在于具体处理方式的不同。在此基础上,可以根据项目需要进行具体的扩展和改进。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Servlet+Jsp实现图片或文件的上传功能具体思路及代码 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • java与php的区别浅析

    Java与PHP的区别浅析 Java和PHP都是常见的编程语言,它们可以用于开发Web应用程序、桌面应用程序、移动应用程序等。但是Java和PHP在许多方面都有不同的使用场景和不同的特点。下面是Java与PHP的区别浅析。 1. 编译方式 Java是一种编译型语言,它的代码是通过JVM(Java Virtual Machine)进行编译和执行的。Java代码…

    Java 2023年6月15日
    00
  • java计算两个日期中间的时间

    如果想要计算两个日期中间的时间,可以使用Java的Date和Calendar类来处理,具体步骤如下: 使用SimpleDateFormat类将输入的两个日期字符串转换为Date对象。 String startDate = "2021-01-01"; String endDate = "2021-06-30"; Simp…

    Java 2023年5月20日
    00
  • 基于jsp:included的使用与jsp:param乱码的解决方法

    接下来我将为您详细讲解“基于jsp:included的使用与jsp:param乱码的解决方法”的完整攻略。 1. 基于jsp:included的使用 1.1 简介 jsp:include指令用于在当前JSP文件中包含其他JSP页面片段或者静态页面。使用该指令可以提高应用程序的模块化,方便代码的维护。 1.2 语法 <jsp:include page=&…

    Java 2023年6月15日
    00
  • Java中快速把map转成json格式的方法

    将Map对象转换为JSON格式的字符串是Java开发中很常见的操作。下面提供两种快速将Java Map对象转换为JSON格式的方法。 方法一:使用jackson-databind实现Map转JSON Jackson是一个非常常用的Java JSON库。使用jackson可以方便地将Java对象序列化为JSON格式字符串。下面是快速把Map类型转成json的示…

    Java 2023年5月26日
    00
  • Java多线程atomic包介绍及使用方法

    下面是详细讲解“Java多线程atomic包介绍及使用方法”的完整攻略。 什么是Java多线程atomic包? Java多线程中的atomic包是提供原子性操作的一个工具包。所谓原子性操作,是指一个操作在执行时不会被其他线程的操作所干扰,不会出现数据不一致或者执行结果不完整的情况。atomic包中的类都是安全的,可以保证在多线程的环境下进行数据操作时不会造成…

    Java 2023年5月26日
    00
  • Java介绍多线程计算阶乘实现方法

    Java介绍多线程计算阶乘实现方法 多线程是Java编程语言中提供了一种处理器和其他资源的并行协作方式。它可以为程序员提供一种实现异步编程、并行代码以及提高程序性能的方式。本文将介绍在Java中如何通过多线程计算阶乘。 基本概念 阶乘是一个正整数的连乘积,如4! = 4 * 3 * 2 * 1 = 24。计算阶乘是一种高 CPU 使用率的密集计算,这意味着使…

    Java 2023年5月18日
    00
  • 详解android studio游戏摇杆开发教程,仿王者荣耀摇杆

    Android Studio游戏摇杆开发教程 本教程将介绍如何在Android Studio中开发游戏摇杆控件,以实现类似于王者荣耀游戏的摇杆控制功能。本教程将涉及到如下内容: 摇杆的原理及实现技术; 摇杆控件的设计; 使用摇杆控件实现王者荣耀摇杆控制功能。 摇杆原理及实现技术 摇杆控件常用的实现方式是利用手指在摇杆区域内滑动的距离和方向来实现控制操作。我们…

    Java 2023年5月26日
    00
  • java Freemarker页面静态化实例详解

    Java FreeMarker页面静态化实例详解 什么是FreeMarker页面静态化 FreeMarker是一款基于模板技术实现的Java模板引擎,它可以将动态的HTML页面转化成静态的HTML页面,将一个基于模板的数据模型填充到模板中生成完整的HTML页面,并将HTML页面中的占位符等内容替换成相应的数据,将页面的内容动态的生成并输出。FreeMarke…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部