Spring Boot 多文件上传

在实际的Web应用程序中,文件上传是一个常见的需求。Spring Boot提供了简单而强大的方式来实现多文件上传功能。本文将介绍如何使用Spring Boot实现多文件上传,并提供相应的代码示例。

准备工作

在开始之前,我们需要进行一些准备工作。首先,我们需要创建一个Spring Boot项目。可以使用Spring Initializr( Boot项目。在生成项目时,确保选择“Web”依赖项以便支持文件上传。

创建文件上传接口

我们首先需要创建一个Controller类来处理文件上传请求。在这个类中,我们将定义一个POST请求处理方法来接收文件上传,并将其保存到服务器上。以下是一个示例代码:

import org.springframework.http.MediaType;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

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

@RestController
@RequestMapping("/upload")
public class FileUploadController {

    @PostMapping(value = "/files", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public String uploadFiles(@RequestParam("files") MultipartFile[] files) {
        // 检查文件是否为空
        if (files == null || files.length == 0) {
            return "请选择要上传的文件";
        }
        
        // 创建目录
        String uploadDir = "upload/";
        File dir = new File(uploadDir);
        if (!dir.exists()) {
            dir.mkdir();
        }

        // 保存文件
        for (MultipartFile file : files) {
            if (!file.isEmpty()) {
                String fileName = StringUtils.cleanPath(file.getOriginalFilename());
                try {
                    file.transferTo(new File(uploadDir + fileName));
                } catch (IOException e) {
                    e.printStackTrace();
                    return "文件上传失败";
                }
            }
        }

        return "文件上传成功";
    }
}

在上面的代码中,我们使用@PostMapping注解来指定处理POST请求的方法。consumes属性指定了该方法只接受multipart/form-data类型的请求,这是文件上传请求的默认类型。我们使用@RequestParam注解来获取上传的文件,这里使用了files作为参数名,因此在发送文件上传请求时,需要将文件参数命名为files。在方法体中,我们首先检查了上传的文件是否为空,然后创建了一个目录用于保存上传的文件。最后,我们使用transferTo方法将文件保存到指定的目录中。

创建文件上传表单

接下来,我们需要创建一个HTML表单,以便用户可以选择并上传文件。以下是一个简单的示例代码:

<!DOCTYPE html>
<html>
<head>
    <title>文件上传</title>
</head>
<body>
    文件上传
    <form action="/upload/files" method="post" enctype="multipart/form-data">
        <input type="file" name="files" multiple>
        <input type="submit" value="上传">
    </form>
</body>
</html>

在上面的代码中,我们使用了<form>元素来创建一个表单,其中的action属性指定了文件上传的目标URL,这里将其设置为/upload/files,与Controller类中的请求处理方法路径一致。enctype属性指定了表单数据的编码类型,这里我们使用了multipart/form-data以支持文件上传。<input>元素的type属性设置为file,以便用户可以选择文件进行上传。name属性设置为files,与Controller类中的请求参数名一致。最后,我们使用了<input>元素的type属性设置为submit,以便用户点击提交表单。

运行应用程序

完成上述代码后,我们可以启动Spring Boot应用程序并访问上传文件的表单页面。在浏览器中输入http://localhost:8080,将看到一个简单的文件上传表单。选择并上传文件后,文件将保存在服务器上的upload/目录中。

总结

通过使用Spring Boot,我们可以很容易地实现多文件上传功能。本文介绍了如何创建一个Controller类来处理文件上传请求,并提供了相应的代码示例。我们还创建了一个HTML表单来供用户上传文件。希望本文