知識庫 / Spring / Spring Web RSS 訂閱

使用 Spring Boot 和 Thymeleaf 上傳圖片

Spring Web
HongKong
10
11:56 AM · Dec 06 ,2025

1. 概述

在本快速教程中,我們將探討如何使用 Spring Boot 和 Thymeleaf 在 Java Web 應用程序中上傳圖片。

2. 依賴項

我們需要兩個依賴項:Spring Boot Web 和 Thymeleaf。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

3. Spring Boot 控制器

我們的第一步是創建 Spring Boot Web 控制器來處理我們的請求:

@Controller public class UploadController {

    public static String UPLOAD_DIRECTORY = System.getProperty("user.dir") + "/uploads";

    @GetMapping("/uploadimage") public String displayUploadForm() {
        return "imageupload/index";
    }

    @PostMapping("/upload") public String uploadImage(Model model, @RequestParam("image") MultipartFile file) throws IOException {
        StringBuilder fileNames = new StringBuilder();
        Path fileNameAndPath = Paths.get(UPLOAD_DIRECTORY, file.getOriginalFilename());
        fileNames.append(file.getOriginalFilename());
        Files.write(fileNameAndPath, file.getBytes());
        model.addAttribute("msg", "Uploaded images: " + fileNames.toString());
        return "imageupload/index";
    }
}

我們定義了兩種方法來處理 HTTP GET 請求。<em>displayUploadForm()</em> 方法處理 GET 請求並返回 Thymeleaf 模板的名稱,以便向用户顯示並讓他導入圖片。

<em>uploadImage()</em> 方法處理圖片上傳。它接受 multipart/form-data POST 請求,在圖片上傳時將圖片保存到本地文件系統。<strong>MultipartFile接口是 Spring Boot 提供的一種特殊數據結構,用於在 multipart 請求中表示上傳的文件。</strong>

最後,我們創建了一個上傳文件夾來存儲所有上傳的圖片。我們還添加了一條消息,包含上傳的圖片的名稱,以便在用户提交表單後顯示。

4. Thymeleaf 模板

第二步是創建名為 index.html的 Thymeleaf 模板,該模板位於 src/main/resources/templates路徑下。 此模板顯示一個 HTML 表單,允許用户選擇並上傳圖像。 此外,我們使用 accept=”image/*” 屬性,僅允許用户導入圖像,而不是導入任何文件。

下面是 index.html 文件的結構:

<body>
<section class="my-5">
    <div class="container">
        <div class="row">
            <div class="col-md-8 mx-auto">
                <h2>Upload Image Example</h2>
                <p th:text="${message}" th:if="${message ne null}" class="alert alert-primary"></p>
                <form method="post" th:action="@{/upload}" enctype="multipart/form-data">
                    <div class="form-group">
                        <input type="file" name="image" accept="image/*" class="form-control-file">
                    </div>
                    <button type="submit" class="btn btn-primary">Upload image</button>
                </form>
                <span th:if="${msg != null}" th:text="${msg}"></span>
            </div>
        </div>
    </div>
</section>
</body>

5. 自定義文件大小

如果嘗試上傳一個大型文件,將會拋出 MaxUploadSizeExceededException 異常。但是,我們可以通過配置屬性 spring.servlet.multipart.max-file-sizespring.servlet.multipart.max-request-size 來調整文件上傳限制,這些配置項定義在 application.properties 文件中。

spring.servlet.multipart.max-file-size = 5MB
spring.servlet.multipart.max-request-size = 5MB

6. 結論

在本文中,我們演示瞭如何在基於 Spring Boot 和 Thymeleaf 的 Java Web 應用程序中上傳圖像的方法。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.