Spring Boot中实现文件上传和下载功能

星辰守望者 2021-09-27 ⋅ 24 阅读

在现代的Web应用程序中,文件上传和下载功能是常见的需求。Spring Boot为我们提供了简单且方便的方式来实现这些功能。本篇博客将介绍如何在Spring Boot项目中实现文件上传和下载功能。

文件上传

首先,我们需要配置我们的应用程序来允许文件上传。在application.properties文件中,添加以下配置:

spring.servlet.multipart.enabled=true
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

上述配置将允许最大10MB大小的文件上传。你可以根据你的需求进行调整。

接下来,我们需要创建一个FileController类来处理文件上传的请求。在FileController类中,我们可以使用@RestController注解来标记该类为一个REST控制器,并且我们可以使用@PostMapping注解来标记该方法为处理POST请求的方法。整个FileController类的代码示例如下:

@RestController
public class FileController {

    @PostMapping("/upload")
    public String uploadFile(@RequestParam("file") MultipartFile file) {
        try {
            // 获取文件的原始名称
            String fileName = file.getOriginalFilename();

            // 将文件保存到本地文件系统中
            Path filePath = Paths.get("uploads/" + fileName);
            Files.copy(file.getInputStream(), filePath);

            return "文件上传成功!";
        } catch (IOException e) {
            return "文件上传失败!";
        }
    }
}

在上述代码中,我们使用@RequestParam注解来获取上传的文件。我们还使用getOriginalFilename()方法来获取文件的原始名称。然后,我们使用Paths.get()方法来创建保存文件的路径对象,并使用Files.copy()方法将文件保存到本地文件系统中。

文件下载

接下来,我们需要实现文件下载功能。为此,我们需要创建一个新的REST控制器,并添加一个新的方法来处理文件下载请求。在FileController类中,添加以下代码:

@RestController
public class FileController {

    // ...

    @GetMapping("/download/{fileName:.+}")
    public ResponseEntity<Resource> downloadFile(@PathVariable String fileName) {
        try {
            // 获取文件的路径
            Path filePath = Paths.get("uploads/" + fileName);

            // 从文件路径中创建资源对象
            Resource resource = new UrlResource(filePath.toUri());

            // 设置响应头,使浏览器能够下载文件
            return ResponseEntity.ok()
                    .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + resource.getFilename() + "\"")
                    .body(resource);
        } catch (MalformedURLException e) {
            return ResponseEntity.notFound().build();
        }
    }
}

在上述代码中,我们使用@PathVariable注解来获取要下载的文件名称。然后,我们使用Paths.get()方法来获取文件的路径,并使用UrlResource类来创建资源对象。最后,我们使用ResponseEntity类来返回包含文件资源的响应实体,并设置响应头,以便浏览器能够正确下载文件。

测试文件上传和下载功能

现在我们可以测试我们的文件上传和下载功能。可以使用Postman或类似工具进行测试。

文件上传

使用POST请求发送/upload,选择一个要上传的文件,然后点击发送。如果一切正常,你将收到一个"文件上传成功!"的响应。

文件下载

使用GET请求发送/download/filename,将filename替换为你要下载的文件的名称。如果文件存在,你将收到一个响应,并且文件将自动下载到你的本地计算机。

总结

在本篇博客中,我们介绍了如何使用Spring Boot实现文件上传和下载功能。通过简单配置和使用Spring Boot的强大功能,我们可以轻松地实现这些基本的文件操作。希望这篇博客对你有所帮助!


全部评论: 0

    我有话说: