📜  在 Spring Boot 中使用 JPA、Thymeleaf、Multipart 上传多个文件(1)

📅  最后修改于: 2023-12-03 14:51:10.574000             🧑  作者: Mango

在 Spring Boot 中使用 JPA、Thymeleaf、Multipart 上传多个文件

在开发Web应用程序时,我们经常需要实现文件上传的功能。Spring Boot提供了方便的方式来处理文件上传,并且在结合了JPA和Thymeleaf之后,可以更加高效地编写代码。

本文将介绍如何在Spring Boot中使用JPA、Thymeleaf和Multipart实现多个文件的上传功能。

1. 添加依赖

首先,在pom.xml文件中添加必要的依赖项:

<dependencies>
    <!-- Spring Boot Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Spring Boot JPA -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <!-- Thymeleaf -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
</dependencies>
2. 创建实体类和数据库表

接下来,创建一个实体类来表示文件对象,并在数据库中创建相应的表。

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class File {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private String path;
    
    // 省略 getter 和 setter 方法
}
3. 创建文件上传表单

在Thymeleaf视图中创建文件上传表单,同时支持多个文件上传。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<body>
    <form method="POST" action="/upload" enctype="multipart/form-data">
        <input type="file" name="files" multiple>
        <input type="submit" value="Upload">
    </form>
</body>
</html>
4. 创建文件上传控制器

创建一个控制器来处理文件上传的请求并保存文件。

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

@Controller
public class FileUploadController {
    @Value("${upload.path}")
    private String uploadPath;

    @PostMapping("/upload")
    public String uploadFiles(@RequestParam("files") MultipartFile[] files) {
        for (MultipartFile file : files) {
            if (!file.isEmpty()) {
                String filename = file.getOriginalFilename();
                String filepath = uploadPath + "/" + filename;

                // 保存文件到指定路径

                // 创建文件对象并保存到数据库
            }
        }

        return "redirect:/";
    }
}
5. 设置文件上传路径

application.properties文件中配置文件上传的路径。

upload.path=/path/to/upload/directory
6. 创建文件列表视图

创建一个Thymeleaf视图来显示已上传的文件列表。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<body>
    <table>
        <tr>
            <th>ID</th>
            <th>Name</th>
        </tr>
        <tr th:each="file : ${files}">
            <td th:text="${file.id}"></td>
            <td th:text="${file.name}"></td>
        </tr>
    </table>
</body>
</html>
7. 创建文件列表控制器

创建一个控制器来处理文件列表页面的请求,并从数据库中获取文件列表。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class FileListController {
    @Autowired
    private FileRepository fileRepository;

    @GetMapping("/")
    public String getFileList(ModelMap modelMap) {
        modelMap.addAttribute("files", fileRepository.findAll());
        return "file-list";
    }
}
8. 部署并运行应用程序

完成以上步骤后,可以将应用程序部署到Web容器中并启动应用程序。通过访问上传文件的URL,即可上传多个文件并查看已上传的文件列表。

以上就是在Spring Boot中使用JPA、Thymeleaf和Multipart实现多个文件的上传功能的详细步骤。希望对您有所帮助!