SpringCloud 微服务中 通过Feign 调用文件下载接口 下载文件 不能使用 HttpServletResponse 接受文件流.

 1. 使用 feign.Response, 调用完远程接口后,再获取处理返回的文件流

 2. 使用ResponseEntity<byte[]> 来传送文件流

 a. 远程文件下载接口


        ResponseEntity<byte[]> entity = null;
        HttpHeaders headers = new HttpHeaders();
      
            //读取文件字节数组
            byte[] res = testService.testMethod(...param);
            headers.add("Content-Type", "application/octet-stream");
            headers.add("Connection", "close");
            headers.add("Accept-Ranges", "bytes");
            headers.add("Content-Disposition",
                    "attachment;filename=" + new String(file_name.getBytes("GB2312"), "ISO8859-1"));
            ...一些业务操作
            //将文件字节数组,header,状态码封装到ResponseEntity
            entity = new ResponseEntity<byte[]>(res, headers, HttpStatus.OK);
        return entity

 b. 服务调用方直接返回

 @GetMapping("/download/file") 
 public ResponseEntity<byte[]> downloadExcelFiles( ... some params){
       return  直接调用远程下载方法;
    }

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐