Spring Boot + thymeleaf 实现文件上传下载功能

下面我将详细讲解“Spring Boot + Thymeleaf 实现文件上传下载功能”的完整攻略。

准备工作

在开始前,请确保你已经具备以下环境:

  • JDK1.8及以上
  • Maven 3.0及以上

项目搭建

  1. 建立一个 Spring Boot 项目

可以通过 Spring Initializr 快速搭建,选择 Web 依赖和 Thymeleaf 模板引擎即可。

  1. 引入依赖

在 pom.xml 中引入文件上传下载所需的依赖:

<!-- 文件上传 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 文件下载 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-io</artifactId>
    <version>1.3.2</version>
</dependency>
  1. 编写上传文件页面

在 templates 文件夹下新建 upload.html 文件,并编写上传文件页面的 html 代码,以下是一个简单示例:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
</head>
<body>
<h2>文件上传</h2>
<!–- enctype="multipart/form-data" 必须加上,否则无法上传文件 -–>
<form th:action="@{/upload}" method="post" enctype="multipart/form-data">
    <input type="file" name="file"/>
    <br/><br/>
    <input type="submit" value="上传"/>
</form>
</body>
</html>
  1. 新建 Controller

在 controller 包下新建 UploadController.java 文件,并编写文件上传和下载的代码。

@Controller
public class UploadController {

    //上传文件页面
    @GetMapping("/upload")
    public String upload() {
        return "upload";
    }

    //处理文件上传
    @PostMapping("/upload")
    public String uploadFile(@RequestParam("file") MultipartFile file) {
        if (file.isEmpty()) {
            return "上传失败,请选择文件";
        }
        try {
            // 获取文件名
            String fileName = file.getOriginalFilename();
            // 获取文件的后缀名
            String suffixName = fileName.substring(fileName.lastIndexOf("."));
            // 文件上传路径
            String filePath = "C:/temp/";
            // 解决中文问题,liunx下中文路径,图片显示问题
            fileName = UUID.randomUUID() + suffixName;
            File dest = new File(filePath + fileName);
            // 检测是否存在目录
            if (!dest.getParentFile().exists()) {
                dest.getParentFile().mkdirs();// 新建文件夹
            }
            file.transferTo(dest);// 文件写入
            return "上传成功";
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "上传失败!";
    }

    //下载文件
    @GetMapping("/download/{fileName}")
    public ResponseEntity<byte[]> download(@PathVariable("fileName") String fileName) throws IOException {
        // 文件上传路径
        String filePath = "C:/temp/";
        File file = new File(filePath + fileName);
        HttpHeaders headers = new HttpHeaders();
        //下载显示的文件名,解决中文名称乱码问题
        String downloadFileName = new String(fileName.getBytes("UTF-8"),"iso-8859-1");
        //通知浏览器以attachment(下载方式)打开图片
        headers.setContentDispositionFormData("attachment", downloadFileName);
        //application/octet-stream : 二进制流数据(最常见的文件下载)。
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED);
    }
}

在上面的代码中,文件上传路径为 C:/temp/,你可以根据需要修改文件上传路径和下载路径。此外,为了避免文件名重复,上传文件会以随机 UUID 重新命名。

  1. 编译运行测试

在浏览器中访问 http://localhost:8080/upload ,上传文件即可。文件上传成功后,访问 http://localhost:8080/download/文件名 可以下载文件。

示例

下面给出两个文件上传下载的示例。

示例一:上传本地的文件

在上传文件页面中添加一个选择文件的 input ,代码如下:

<input type="file" name="file"/>

上传本地的文件后,可以在上传成功后的页面看到上传的文件名和下载链接。点击下载链接即可下载该文件。

示例二:上传 base64 编码的文件

在上传文件页面中添加一个 textarea,用来输入 base64 编码后的文件内容,代码如下:

<textarea name="file" rows="5" cols="50"></textarea>

文件上传时,需要对 base64 编码后的文件内容进行解码,代码如下:

// 将 base64 编码的字符串转换成 byte 数组
byte[] bytes = Base64Utils.decodeFromString(fileContent);
// 文件上传路径
String filePath = "C:/temp/";
// 将解码后的文件内容写入文件
FileUtils.writeByteArrayToFile(new File(filePath + fileName), bytes);

上传成功后,同样可以在页面上看到上传的文件名和下载链接。

结语

以上就是 Spring Boot + Thymeleaf 实现文件上传下载功能的完整攻略,希望可以帮助到你。如果你有任何问题或建议,请在评论区留言,我会及时回复你。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot + thymeleaf 实现文件上传下载功能 - Python技术站

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

相关文章

  • Maven使用方法详及方式详细介绍

    Maven 使用方法详及方式详细介绍 什么是 Maven Apache Maven 是一个软件项目管理和理解工具。Maven 可以帮助你自动化构建、测试和部署你的项目。Maven 还提供了许多用来管理项目的标准化范式和描述,使得开发人员可以更容易地协作。 简介 Maven 使用一个 Project Object Model (POM) 文件来描述项目的构建,…

    Java 2023年5月20日
    00
  • 一篇文章带你入门java集合

    一篇文章带你入门Java集合 Java集合是Java编程中常用的数据结构,包含了List、Set、Map等常用的集合类型。本文将从以下几个方面介绍Java集合: Java集合的类型和概念 Java集合的基础用法 Java集合的注意事项 1. Java集合的类型和概念 集合类型 Java集合主要有以下三种类型: List(列表):有序,可以重复,例如Array…

    Java 2023年5月26日
    00
  • HttpClient基础解析

    HttpClient基础解析 什么是HttpClient? HttpClient是Apache软件基金会所提供的一个用于处理HTTP请求的第三方库。其提供了方便的API,使得我们可以通过代码实现HTTP请求的发送与响应的接收。 HttpClient的优点 简单易用:HttpClient提供了方便的API,使得我们可以通过简单的代码实现HTTP请求的发送与响应…

    Java 2023年5月20日
    00
  • Java的Struts框架报错“NullRequestProcessorException”的原因与解决办法

    当使用Java的Struts框架时,可能会遇到“NullRequestProcessorException”错误。这个错误通常由以下原因之一起: 配置错误:如果配置文件中没有正确配置,则可能会出现此错误。在这种情况下,需要检查文件以解决此问题。 请求处理器:如果请求处理器不正确,则可能出现此错误。在这种情况下,需要检查请求处理器以解决此问题。 以下是两个实例…

    Java 2023年5月5日
    00
  • Java实现快速排序算法(Quicktsort)

    Java实现快速排序算法(Quicksort) 在本文中,将介绍如何使用Java语言实现快速排序算法。快速排序算法是一种经典的排序算法,其时间复杂度为O(nlogn),其实现方式类似于分治算法,通过选择基准值,将输入序列分为两个子序列,分别对其进行递归排序。 算法原理 快速排序算法被认为是最优秀的排序算法之一,因为它的时间复杂度为O(nlogn),它的核心思…

    Java 2023年5月19日
    00
  • java异常处理拦截器详情

    Java异常处理拦截器(Exception Handler)是一个对应用程序中的异常做出响应的组件。它可以捕捉并处理应用程序中发生的异常,从而使程序能够从异常中恢复并继续执行。在Java中,Exception Handler是通过异常处理代码块(try-catch)或者异常处理方法(throws)来实现的。 下面我们将具体讲解如何使用Java异常处理拦截器:…

    Java 2023年5月27日
    00
  • 在jmeter的beanshell中用java获取系统当前时间的简单实例

    下面我将详细讲解在JMeter的BeanShell中使用Java获取系统当前时间的简单实例,攻略如下: 1. 利用Java类获取时间戳 我们首先需要了解利用Java类获取时间戳的方式。在Java中,可以使用System.currentTimeMillis()方法获取当前时间的时间戳。具体实现如下: public class CurrentTime { pub…

    Java 2023年5月20日
    00
  • JDBC使用游标实现分页查询的方法

    介绍 JDBC是Java Database Connectivity的简称,是Java语言中用于访问关系型数据库的API,是Java程序员以及开发人员必须掌握的技能之一。本文将讲解如何使用JDBC实现分页查询。 步骤 获取数据库连接 Connection conn = null; Statement stmt = null; ResultSet rs = n…

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