Jsp+Servlet实现文件上传下载 删除上传文件(三)

这篇攻略是介绍如何使用 JSP 和 Servlet 来实现文件上传下载以及删除上传文件。其中包含以下内容:

  1. 上传文件处理(上传文件存储,上传文件名称处理)
  2. 下载文件处理(下载文件存储)
  3. 删除文件处理

除此之外,还会用到一些库和工具,如 commons-fileupload、commons-io、bootstrap。

上传文件处理

上传文件存储

在上传文件之前,需要在项目 WebContent 目录下创建 upload 文件夹,保存上传的文件。

String uploadFilePath = request.getSession().getServletContext()
  .getRealPath("/upload/"); // 获取上传路径
File uploadDir = new File(uploadFilePath);
if (!uploadDir.exists()) {
  uploadDir.mkdir(); // 如果目录不存在,则创建目录
}

上传文件名称处理

上传文件的名称可能会包含中文等特殊字符,需要对其进行处理。可以使用 common-io 库来解决这个问题。

String filename = item.getName();
String saveFilename = UUID.randomUUID().toString() + "_" + 
  FilenameUtils.getName(filename); // 生成随机的文件名
File saveFile = new File(uploadFilePath, saveFilename);
item.write(saveFile); // 保存文件

使用 FilenameUtils.getName() 方法来获取原始文件名,然后拼接一个随机生成的字符串作为新文件名。最后,将上传的文件保存到 upload 文件夹中。

下载文件处理

下载文件时,需要根据文件名查询存储路径,并将文件的内容以流的方式写入到 HttpServletResponse 中。

String filePath = request.getSession().getServletContext()
  .getRealPath("/upload/"); // 获取文件路径
File file = new File(filePath + File.separator + filename);
if (file.exists()) {
  response.setContentType("application/octet-stream"); // 设置文件类型
  response.setHeader("Content-Disposition", "attachment;filename=" + 
    new String(filename.getBytes("GB2312"), "ISO-8859-1")); // 设置文件名
  InputStream in = null;
  OutputStream out = null;
  try {
    in = new FileInputStream(file);
    out = response.getOutputStream();
    byte[] buffer = new byte[1024];
    int len;
    while ((len = in.read(buffer)) > 0) {
      out.write(buffer, 0, len);
    }
    out.flush();
  } catch (Exception e) {
    e.printStackTrace();
  } finally {
    if (in != null) {
      try {
        in.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    if (out != null) {
      try {
        out.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }
}

删除文件处理

删除文件时,需要根据文件名查询存储路径,并使用 File 类的 delete() 方法来删除文件。

String filePath = request.getSession().getServletContext()
  .getRealPath("/upload/"); // 获取文件路径
File file = new File(filePath + File.separator + filename);
if (file.exists()) {
  file.delete();
  // 返回删除成功的信息
} else {
  // 返回文件不存在的信息
}

使用 File 类的 delete() 方法可以直接删除文件。注意,如果文件不存在,需要返回相应的错误信息。

示例代码:

在实际项目中,可能需要使用到 Bootstrap 等库来美化页面,这里就不再展示相关内容。完整的示例代码可以参考 Github

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Jsp+Servlet实现文件上传下载 删除上传文件(三) - Python技术站

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

相关文章

  • Java面试题冲刺第四天–数据库

    Java面试题冲刺第四天–数据库攻略 数据库是Java开发中非常重要的一部分,因此数据库相关的面试题也是面试中的重点部分。下面将从数据库的知识点、常见面试题以及解答方法等方面进行介绍。 一、数据库的知识点 数据库的分类:关系型数据库(RDBMS)和非关系型数据库(NoSQL)。 常用的关系型数据库:MySQL、Oracle、SQL Server等。 常用的…

    Java 2023年5月19日
    00
  • spring boot实现软删除的示例代码

    下面是Spring Boot实现软删除的完整攻略: 1. 理解软删除 首先需要了解软删除的概念和作用。软删除指的是不是真正删除数据,而是在数据库中新增一个状态字段,用于标记该数据是否被删除。这样可以保留数据完整性,同时又不会真正删除数据,方便数据恢复。 2. 实现示例1 我们以一个简单的用户信息管理为例进行讲解。首先创建一个用户实体类,包含id、用户名、密码…

    Java 2023年5月19日
    00
  • 使用jpa的时候set实体类属性自动持久化的解决方案

    当我们使用JPA时,为了方便,我们可能希望在对实体类属性进行赋值后,自动进行数据库的持久化。但是在一些情况下,这个自动持久化的特性可能会让我们犯下一些错误或者遇到一些麻烦。在这种情况下,我们可以通过以下两种方式来解决这个问题。 方案一:使用@EntityListeners来监听实体类变化进行持久化 在JPA中,我们可以使用EntityListener来监听实…

    Java 2023年5月20日
    00
  • 深入了解Java核心类库–Arrays类

    深入了解Java核心类库–Arrays类 Arrays类概述 Arrays类位于java.util包中,提供了各种对数组进行处理的方法。其中包括: 对数组进行排序、搜索、拷贝、填充、比较等操作 对数组进行操作时,提供了对基本类型和对象类型数组的支持 Arrays类中的方法均为静态方法,可通过Arrays.xxx()的方式直接调用。 常用方法详解 排序方法 …

    Java 2023年5月26日
    00
  • Springboot WebFlux集成Spring Security实现JWT认证的示例

    下面是关于“Springboot WebFlux集成Spring Security实现JWT认证的示例”的完整攻略。 一、简介 在开始之前,先简单介绍一下SpringBoot和SpringSecurity。 SpringBoot:是Spring官方提供的一个快速开发框架,它能够极大地简化项目的搭建和配置,提高开发效率。 SpringSecurity:是Spr…

    Java 2023年5月20日
    00
  • MyEclipse中jsp的注释报错解决方法

    针对“MyEclipse中jsp的注释报错解决方法”的问题,我们可以采取以下步骤进行解决: 1. 了解问题 首先我们需要了解报错的原因,通常在MyEclipse中,JSP页面中如果出现 样式的注释,则可能会引起注释报错的问题。 2. 解决方法 解决这个问题,我们可以通过修改MyEclipse的配置来达到目的。具体步骤如下: 步骤1:打开MyEclipse的高…

    Java 2023年6月15日
    00
  • Java使用DateTimeFormatter实现格式化时间

    下面是针对“Java使用DateTimeFormatter实现格式化时间”的完整攻略: 引言 在Java中,有时我们需要将时间转换为特定格式以便与其他系统交互。这时我们可以使用Java 8引入的DateTimeFormatter类进行格式化。该类提供了一些预定义的格式模式,也允许用户定义自己的格式模式。 步骤 1. 创建一个LocalDateTime对象 D…

    Java 2023年5月20日
    00
  • Spring Boot构建框架详解

    SpringBoot构建框架详解 什么是SpringBoot SpringBoot是由Pivotal团队在2013年开源的一款基于Java的框架,它旨在让开发者更加便捷地创建Spring应用。SpringBoot具备自动配置、快速开发、无代码生成等特点,同时它也提供了包括Web、数据、消息等在内的一系列开发场景。 如何使用SpringBoot 1. 环境要求…

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