Spring Boot Controller 返回文件

在 Web 开发中,有时我们需要从服务器端返回文件给客户端,例如下载文件或者查看图片等。在使用 Spring Boot 框架进行开发时,我们可以很方便地实现这个功能。

使用 ResponseEntity 返回文件

Spring Boot 提供了 ResponseEntity 类来处理 HTTP 响应,它可以用于返回不同类型的响应,包括文件。我们可以通过以下步骤来实现返回文件的功能:

  1. 创建一个 Controller 类,并添加 @RestController 注解。
@RestController
public class FileController {
    // Controller methods
}
  1. 在 Controller 类中添加一个方法,用于处理返回文件的请求。我们可以使用 ResponseEntity 类来封装文件和 HTTP 头信息。
@GetMapping("/file")
public ResponseEntity<InputStreamResource> downloadFile() throws IOException {
    // 读取文件内容
    ClassPathResource resource = new ClassPathResource("example.txt");
    
    // 设置 HTTP 头信息
    HttpHeaders headers = new HttpHeaders();
    headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=example.txt");
    
    // 创建 ResponseEntity 对象
    return ResponseEntity
            .ok()
            .headers(headers)
            .contentType(MediaType.APPLICATION_OCTET_STREAM)
            .body(new InputStreamResource(resource.getInputStream()));
}

在上述代码中,我们假设有一个名为 example.txt 的文件,并将其放置在项目的 resources 目录下。在方法中,我们通过 ClassPathResource 类来读取文件内容,并使用 HttpHeaders 类来设置文件名。

  1. 启动 Spring Boot 应用,并访问 /file 路径,即可下载名为 example.txt 的文件。

序列图

下面是一个示例的序列图,展示了客户端请求文件,服务器返回文件的过程。

sequenceDiagram
    participant Client
    participant Server
    Client->>Server: GET /file
    Server->>Server: 读取文件内容
    alt 文件存在
        Server-->>Client: 返回文件
    else 文件不存在
        Server-->>Client: 返回 404 Not Found
    end

在上述序列图中,客户端发送一个 GET 请求到服务器,请求下载文件。服务器读取文件内容,并根据文件是否存在来作出不同的响应。如果文件存在,服务器返回文件给客户端;如果文件不存在,服务器返回 404 Not Found 错误。

总结

通过使用 Spring Boot 和 ResponseEntity 类,我们可以轻松地实现在 Controller 中返回文件给客户端的功能。在实际开发中,我们可以根据需要进行扩展,例如限制文件的访问权限、处理异常情况等。

希望本文对你理解 Spring Boot Controller 返回文件的过程有所帮助!