返回

玩转文件上传:轻松实现Spring MVC文件上传

后端

让文件上传轻而易举:使用 Spring MVC 简化文件处理

1. 轻松上手:单文件上传

准备上传文件?Spring MVC 让它变得轻而易举!只需在控制器中添加一个映射方法,使用 @PostMapping 注解指定处理文件上传的请求。别忘了使用 @RequestParam("file") MultipartFile file 接收前端传递过来的文件。

在 HTML 表单中,使用 <input type="file"> 让用户选择要上传的文件。

@PostMapping("/upload")
public String upload(@RequestParam("file") MultipartFile file) {
    // 文件保存逻辑
    return "redirect:/success";
}

<form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="上传">
</form>

2. 应对挑战:多文件上传

需要一次上传多个文件?<input type="file" multiple> 了解一下!使用它,用户可以轻松选择多个文件进行上传。

<form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="files" multiple>
    <input type="submit" value="上传">
</form>

在控制器中,我们使用 MultipartFile[] 数组来接收多个文件。

@PostMapping("/upload")
public String upload(@RequestParam("files") MultipartFile[] files) {
    // 文件保存逻辑
    return "redirect:/success";
}

3. 保障安全:限制文件大小和类型

安全至上!为了防止恶意文件或过大文件上传,我们可以限制文件大小和类型。

@PostMapping("/upload")
public String upload(@RequestParam("file") MultipartFile file) {
    if (file.getSize() > 1024 * 1024 * 5) {
        return "redirect:/error?message=文件太大";
    }

    if (!Arrays.asList("image/jpeg", "image/png", "image/gif").contains(file.getContentType())) {
        return "redirect:/error?message=文件类型错误";
    }

    // 文件保存逻辑
    return "redirect:/success";
}

4. 完善功能:文件保存和下载

上传的文件需要一个新家!我们可以将它们存储在本地磁盘或云存储中。

@PostMapping("/upload")
public String upload(@RequestParam("file") MultipartFile file) {
    // 文件保存逻辑
    Path path = Paths.get("/path/to/file", file.getOriginalFilename());
    file.transferTo(path);
    return "redirect:/success";
}

下载文件也很简单,使用 ResponseEntity 即可。

@GetMapping("/download/{filename}")
public ResponseEntity<byte[]> download(@PathVariable String filename) {
    Path path = Paths.get("/path/to/file", filename);
    byte[] data = Files.readAllBytes(path);
    HttpHeaders headers = new HttpHeaders();
    headers.set("Content-Disposition", "attachment; filename=" + filename);
    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    return new ResponseEntity<>(data, headers, HttpStatus.OK);
}

5. 结语:文件上传的强大工具

使用 Spring MVC 文件上传,您可以轻松、安全、高效地处理文件上传。根据您的需求,您可以扩展功能,例如异步上传、进度条展示和断点续传。

常见问题解答

1. 如何限制文件上传大小?
您可以使用 @RequestParam("file") MultipartFile file 来限制文件大小。

2. 如何限制文件类型?
您可以使用 file.getContentType() 检查文件类型并进行限制。

3. 如何实现多文件上传?
使用 <input type="file" multiple> 允许用户选择多个文件。

4. 如何在本地存储上传的文件?
您可以使用 file.transferTo(path) 将文件存储在本地路径中。

5. 如何在 Spring MVC 中实现文件下载?
使用 ResponseEntity 类并设置适当的标头即可实现文件下载。