使用Feign实现微服务间文件下载

时间:2021-05-19

在使用Feign做服务间调用的时候,当下载大的文件会出现堆栈溢出的情况。另外,文件管理服务(服务提供者)文件下载接口无返回值,是通过HttpServletRespoonse传输的流数据来响应,那么服务消费者该如何接受下载的数据呢?

一. 示例介绍

我们调用feign_upload_second的下载文件接口下载文件,feign_upload_second内部使用feign调用feign_upload_first实现文件下载。

二、feign_upload_first服务提供者

服务提供者下载文件接口

@RequestMapping(value = "/downloadFile",method = RequestMethod.GET,consumes = MediaType.APPLICATION_JSON_UTF8_VALUE) public void downloadFile(HttpServletResponse response){ String filePath = "D://1.txt"; File file = new File(filePath); InputStream in = null; if(file.exists()){ try { OutputStream out = response.getOutputStream(); in = new FileInputStream(file); byte buffer[] = new byte[1024]; int length = 0; while ((length = in.read(buffer)) >= 0){ out.write(buffer,0,length); } } catch (IOException e) { e.printStackTrace(); } finally { if(in != null){ try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } } }

三、feign_upload_second服务消费者

服务提供者远程调用接口

@RequestMapping(value = "/downloadFile",method = RequestMethod.GET,consumes = MediaType.APPLICATION_JSON_UTF8_VALUE) Response downloadFile();

用feign.Response来接收

服务提供者下载文件接口

@RequestMapping(value = "/download",method = RequestMethod.GET) public ResponseEntity<byte[]> downFile(){ ResponseEntity<byte[]> result=null ; InputStream inputStream = null; try { // feign文件下载 Response response = uploadService.downloadFile(); Response.Body body = response.body(); inputStream = body.asInputStream(); byte[] b = new byte[inputStream.available()]; inputStream.read(b); HttpHeaders heads = new HttpHeaders(); heads.add(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=123.txt"); heads.add(HttpHeaders.CONTENT_TYPE,MediaType.APPLICATION_JSON_VALUE); result = new ResponseEntity <byte[]>(b,heads, HttpStatus.OK); } catch (IOException e) { e.printStackTrace(); } finally { if(inputStream != null){ try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } return result;}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章