使用Feign实现微服务间文件下载
在使用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;
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
详解spring cloud构建微服务架构的网关(API GateWay)
这篇文章主要介绍了详解spring cloud构建微服务架构的网关(API GateWay),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-01-01
解决springboot+activemq启动报注解错误的问题
这篇文章主要介绍了解决springboot+activemq启动报注解错误的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-07-07
@RequestAttribute和@RequestParam注解的区别及说明
这篇文章主要介绍了@RequestAttribute和@RequestParam注解的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-05-05
Java Fluent Mybatis实战之构建项目与代码生成篇下
Java中常用的ORM框架主要是mybatis, hibernate, JPA等框架。国内又以Mybatis用的多,基于mybatis上的增强框架,又有mybatis plus和TK mybatis等。今天我们介绍一个新的mybatis增强框架 fluent mybatis2021-10-10


最新评论