在使用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; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍Feign实现跨服务文件上传下载,包括了Feign实现跨服务文件上传下载的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Feign实现跨服务的文件上传下载操作,供大家参考,具体内容如下 1、跨服务文件上传,目前feign不支持调用文件上传接口,需要自行配置来满足feign的调用方式 ①.首先需要在pom文件里添加feign依赖 ②.上传的接口 ③.添加配置来满足feig
本文向大家介绍SpringCloud使用Feign实现服务调用,包括了SpringCloud使用Feign实现服务调用的使用技巧和注意事项,需要的朋友参考一下 Spring Cloud Feign简介 Spring Cloud Feign也是一个基础工具类,它整合了Spring Cloud Ribbon和Spring Cloud Hystrix,除了提供这两者的强大功能以外,它还提供了一种声明式的
本文向大家介绍利用ssh实现服务器文件上传下载,包括了利用ssh实现服务器文件上传下载的使用技巧和注意事项,需要的朋友参考一下 通过ssh实现服务器文件上传下载 写在前面的话 之前记录过一篇使用apache的FTP开源组件实现服务器文件上传下载的方法,但是后来发现在删除的时候会有些权限问题,导致无法删除服务器上的文件。虽然在Windows上使用FileZilla Server设置读写权限后没问题,
我想从网站上下载一份PDF。PDF需要在代码中生成,我认为这是freemarker和像iText这样的PDF生成框架的组合。还有更好的办法吗? 然而,主要的问题是,我不知道如何允许用户通过Spring控制器下载文件?
本文向大家介绍java 实现微信服务器下载图片到自己服务器,包括了java 实现微信服务器下载图片到自己服务器的使用技巧和注意事项,需要的朋友参考一下 java 实现微信服务器下载图片到自己服务器 此功能的实现需要注意java 中IO流的操作及网路开发, 实现代码: 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
问题内容: 嗨,我有一堆.mp3文件,我想与NSFileManager一起使用并存储在documents文件夹中。有没有一种方法可以在线下载.mp3文件,然后将其保存到documents文件夹?这就是我正在使用的本地文件。 问题答案: 编辑/更新: Xcode 11.5•Swift 5.2 原始答案 Xcode 8.3.2•Swift 3.1