Java Spring Boot 图片上传及多种上传限定格式

在现代Web应用中,图片上传是一项常见的功能需求。使用Java的Spring Boot框架,可以轻松实现这一功能。本文将详细介绍如何在Spring Boot中实现图片上传,并对上传的图片格式进行限制,包括JPEG、PNG和GIF。

1. 项目准备

首先,确保你已经创建了一个Spring Boot项目,并在pom.xml中添加了相关依赖:

<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>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

2. 创建Controller

接下来,我们将创建一个控制器来处理图片上传。以下是一个示例代码:

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

@Controller
public class ImageUploadController {

    private static final String UPLOAD_DIR = "uploads/";

    @GetMapping("/upload")
    public String uploadForm() {
        return "upload";
    }

    @PostMapping("/upload")
    public String uploadImage(@RequestParam("file") MultipartFile file, Model model) {
        // 验证文件格式
        String filename = file.getOriginalFilename();
        if (!isValidImage(filename)) {
            model.addAttribute("message", "只接受jpg, png, gif格式的文件!");
            return "upload";
        }

        // 文件存储
        File destinationFile = new File(UPLOAD_DIR + filename);
        try {
            file.transferTo(destinationFile);
        } catch (IOException e) {
            e.printStackTrace();
            model.addAttribute("message", "文件上传失败!");
            return "upload";
        }

        model.addAttribute("message", "文件上传成功!");
        return "upload";
    }

    private boolean isValidImage(String filename) {
        return filename.endsWith(".jpg") || filename.endsWith(".jpeg") || 
               filename.endsWith(".png") || filename.endsWith(".gif");
    }
}

功能说明

在上面的代码中,我们定义了一个文件上传的表单,并处理上传请求。通过实现 isValidImage 方法来验证上传文件的格式。

3. 创建前端页面

接下来,我们需要创建一个HTML表单用于文件上传。以下是upload.html的内容:

<!DOCTYPE html>
<html xmlns:th="
<head>
    <title>图片上传</title>
</head>
<body>
    图片上传
    <form method="post" enctype="multipart/form-data">
        <input type="file" name="file" accept="image/jpeg, image/png, image/gif" required />
        <button type="submit">上传</button>
    </form>
    <p th:text="${message}"></p>
</body>
</html>

4. 流程图

下面是整个上传流程的流程图,使用Mermaid语法表示:

flowchart TD
    A[用户访问上传页面] --> B[用户选择文件]
    B --> C{文件格式有效?}
    C -- Yes --> D[将文件保存到服务器]
    C -- No --> E[返回错误信息]
    D --> F[显示上传成功消息]
    E --> F

5. 总结

在本文中,我们通过一个简单的示例展示了如何在Spring Boot中实现图片上传,限制了上传文件的格式为JPEG、PNG和GIF。这样的实现不仅能有效地保障系统安全性,还有助于提高用户体验。希望这篇文章能够帮助你在项目中实现图片上传的功能,进一步探索Spring Boot的强大。

借助Spring Boot的灵活性和强大的生态系统,我们还可以对此功能进行更多扩展,例如实现图片的预览、压缩和存储等。