OpenFeign 实现文件下载

OpenFeign 本身主要用于定义和调用 HTTP 服务接口。实现文件下载时,它会向服务端发送一个 HTTP 请求(通常是 GET 请求),服务端接收到请求后,将文件以流的形式返回,客户端再将这个流保存为本地文件,从而完成文件下载。

文件下载示例

实现文件下载步骤如下:

服务端代码:

@GetMapping("/download/{filename}")
public ResponseEntity<byte[]> downloadFile(@PathVariable("filename") String filename) {
    try {
        // D:\tmp\uploads\ 是基础路径
        java.io.File file = new java.io.File("D:\\tmp\\uploads\\" + filename);
        byte[] fileContent = java.nio.file.Files.readAllBytes(file.toPath());

        // 设置响应头,告诉浏览器这是一个文件下载,并且指定文件名
        org.springframework.http.HttpHeaders headers = new org.springframework.http.HttpHeaders();
        headers.add("Content-Disposition", "attachment; filename=" + filename);

        // 返回文件内容、响应头和状态码200(表示成功)
        return new ResponseEntity<>(fileContent, headers, org.springframework.http.HttpStatus.OK);
    } catch (Exception e) {
        // 如果出现异常,返回状态码500(表示服务器内部错误)
        return new ResponseEntity<>(null, null,
                org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

代码详细说明:

  • @GetMapping("/download/{filename}") 定义了一个 GET 请求的接口,{filename} 是一个路径变量,表示要下载的文件名。

  • 在方法内部,首先尝试读取指定目录下的文件,将文件内容读取为字节数组。

  • 然后创建响应头 HttpHeaders,通过 Content-Disposition 属性设置为 attachment; filename=加上文件名,这样浏览器会将响应识别为文件下载,并以指定的文件名保存。

  • 最后返回一个 ResponseEntity,包含文件字节数组、响应头和状态码 200(如果成功)或者 500(如果出现异常)。

定义 Feign 客户端:

// 下载文件
@GetMapping("/simple/download/{filename}")
ResponseEntity<byte[]> downloadFile(@PathVariable("filename") String filename);

💥注意:@GetMapping 注解定义了一个 GET 请求方法,路径 /download/{filename} 与服务端的接口路径相对应,{filename} 是一个路径变量,用于指定要下载的文件名。方法返回ResponseEntity<byte[]> 用于接收从服务端返回的包含文件字节数组的响应。

调用 Feign 客户端实现文件下载:

// 下载文件
@GetMapping("/download/{filename}")
public ResponseEntity<byte[]> downloadFile(@PathVariable("filename") String filename) {
    return simpleFeign.downloadFile(filename);
}

使用 ApiFox 调用接口,输出如下图:

image.png

点击“下载”链接,下载文件,如下图:

image.png

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号