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组件来处理上传的文件,不同之处在于具体处理方式的不同。在此基础上,可以根据项目需要进行具体的扩展和改进。

阅读剩余 78%

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

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

相关文章

  • Java读写ini文件代码示例

    下面我将为您详细讲解如何使用Java读写ini文件,并提供两条示例代码。 什么是ini文件? INI(缩写来自initialize),是一种配置文件的文件名扩展名,在Windows系统中广泛使用,以ASCII编码存储。INI文件是一种键值对(key-value)形式的简单文本文档,其基本格式是: [Section] key1=value1 key2=valu…

    Java 2023年5月20日
    00
  • Java Apache POI报错“EmptyFileException”的原因与解决办法

    “EmptyFileException”是Java的Apache POI类库中的一个异常,通常由以下原因之一引起: 空文件:如果文件为空,则可能会出现此异常。例如,可能会尝试打开一个空的Excel文档。 以下是两个实例: 例1 如果文件为空,则可以尝试检查文件是否存在以解决此问题。例如,在Java中,可以使用以下代码: File file = new Fil…

    Java 2023年5月5日
    00
  • java实现死锁的示例代码

    我来为你详细讲解一下如何实现Java中的死锁。 什么是死锁 死锁是指多个线程相互等待对方释放资源,但是这些线程都不会主动释放资源,就形成了一种相互等待的死局。 死锁示例代码1 以下是一个简单的死锁示例代码,代码通过两个线程互相调用对方已经拥有的同步锁,来形成死锁现象。 public class DeadLockDemo { private static Ob…

    Java 2023年5月19日
    00
  • Java中的可变参数常见用法实例总结

    Java中的可变参数常见用法实例总结 什么是可变参数 Java中的可变参数是在方法参数列表中加上省略号(…)来实现的,可变参数可以接收任意数量的参数,而不需要在方法定义时指定参数个数。 基本语法如下: public static void method(Object… args) { // … } 常见用法 1. 打印日志 在写Java代码时,我…

    Java 2023年5月26日
    00
  • Spring Boot Admin 添加报警提醒和登录验证功能的具体实现

    下面就来详细讲解实现Spring Boot Admin添加报警提醒和登录验证功能的攻略。 添加报警提醒功能 Spring Boot Admin已经内置了一些报警提醒的功能,比如:当应用程序超时,磁盘空间不足或使用过多等情况时,它会向管理员发送电子邮件或Slack通知。 我们可以通过简单的配置来启用这些设置。配置具体步骤如下: 添加Spring Boot Ad…

    Java 2023年5月20日
    00
  • Java实现归并排序的示例代码

    针对Java实现归并排序的示例代码,我来进行详细讲解,包括一些示例代码的说明。 归并排序简介 归并排序是一种基于分治思想的排序算法。其基本思想是将待排序序列拆分成若干子序列,分别进行排序,最后合并子序列,得到最终有序序列。具体来说,归并排序将待排序数组分为两个部分,分别对两个部分进行递归排序,将排好序的两个部分合并成一个有序序列。时间复杂度是O(n logn…

    Java 2023年5月19日
    00
  • 详解关于java文件下载文件名乱码问题解决方案

    关于Java文件下载时文件名乱码问题,可以使用以下方案解决: 方案一:使用Content-Disposition和URLEncoder 在Java中,可以使用Content-Disposition响应头设置文件下载时的文件名,再使用URLEncoder对文件名进行编码,如下: response.setHeader("Content-Disposit…

    Java 2023年5月20日
    00
  • Java中的代码重构如何避免异常?

    Java中的代码重构是一种重要的技术手段,可以提高代码的可读性、可维护性和可测试性。其中,如何避免异常是非常关键的一点。以下是详细的攻略: 理解代码重构的目的和原则 代码重构的目的是改善代码的质量,不影响代码功能。代码重构的原则包括:确保代码的正确性、消除代码的冗余、提高代码的可读性、提高代码的可维护性和可测试性。 意识到异常的重要性 异常是Java中一个非…

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