Skip to content

Spring 上传文件

🏷️ Spring

官方 Guide:Uploading Files  下载代码 (Guide 中贴出来的代码不全,直接使用下载的代码即可)(如果使用 IDEA 开发,打开代码会报错,参照【Maven】IDEA 自动重置 Language level 的解决办法

页面使用 input file 控件选择文件,name 属性为【file】,后面会用到。

html
<form method="POST" enctype="multipart/form-data" action="/">
    <table>
        <tr><td>File to upload:</td><td><input type="file" name="file" /></td></tr>
        <tr><td></td><td><input type="submit" value="Upload" /></td></tr>
    </table>
</form>

控制器的代码( @RequestParam("file") 中的参数就是上面的控件的 name 属性值。参数为 MultipartFile 类型。)

java
@PostMapping("/")
public String handleFileUpload(@RequestParam("file") MultipartFile file,
                               RedirectAttributes redirectAttributes) {

    storageService.store(file);
    redirectAttributes.addFlashAttribute("message",
            "You successfully uploaded " + file.getOriginalFilename() + "!");

    return "redirect:/";
}

保存处理的代码(即 Controller 中的 storageService.store )(使用 Files.copy 方法将文件保存到本地)

java
@Override
public void store(MultipartFile file) {
    try {
        if (file.isEmpty()) {
            throw new StorageException("Failed to store empty file " + file.getOriginalFilename());
        }
        Files.copy(file.getInputStream(), this.rootLocation.resolve(file.getOriginalFilename()));
    } catch (IOException e) {
        throw new StorageException("Failed to store file " + file.getOriginalFilename(), e);
    }
}

application.properties 中可以配置文件上传的大小限制。

properties
spring.http.multipart.max-file-size=128KB
spring.http.multipart.max-request-size=128KB