使用Feign实现微服务间文件下载
程序员文章站
2024-02-24 15:18:13
在使用feign做服务间调用的时候,当下载大的文件会出现堆栈溢出的情况。另外,文件管理服务(服务提供者)文件下载接口无返回值,是通过httpservletrespoonse...
在使用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; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。