Feign跨服务调用导出文件,浏览器没有自动下载文件问题解决

SpringCloud使用feign调用下载文件服务 SpringCloud是当下最流行的分布式服务解决方案之一,是微服务架构的集大成者,将一系列优秀的组件进行了整合。SpringCloud基于springboot构建,对于使用过SpringBoot的同学来说,上手比较容易。 今天学习一下 使用feign跨服务文件下载。 一. 服务提供者 集成Easyexcel实现读入数据(ExcelUtil,easyExcel集成可参考快速入门,使用EasyEx... 阅读详情

前端请求到B服务,B服务使用feign去调用A服务是输出流,这个时候A服务就需要将输出流响应到feign接口中的response上,B服务再拿到feign接口的response,在B服务这里将response以流的方式输到浏览器​;
feign在这里将相当于一个中间人先拿到输出流中转一下。

如果feign接口这里不定义返回值的话并不会抛异常只是不能正常输出到浏览器​,也看不出什么问题​。

1.A服务(文件服务,提供导出方法)

void exportExcel(HttpServletResponse response){       
        // 通过工具类创建writer,默认创建xls格式 hutool(5.1.2).ExcelWriter 
        ExcelWriter writer = ExcelUtil.getWriter();

        //out为OutputStream,需要写出到的目标流
        List<Object> datas;
        response.setContentType("application/vnd.ms-excel;charset=utf-8");
        response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
        response.setHeader("Content-Disposition", "attachment;filename=ExchangeCode.xls");
        ServletOutputStream out = response.getOutputStream();
        writer.merge(5, "数据列表");
        // 一次性写出内容,使用默认样式,强制输出标题
        writer.write(datas, true);
        writer.flush(out, true);
        // 关闭writer,释放内存
        writer.close();
        //此处记得关闭输出Servlet流
        IoUtil.close(out);
}

2.B服务(业务方,调用A服务的导出文件方法)

2.1 Feign方法

    //Feign.Response 
    @GetMapping(value = "/aService/export")
    Response export(@RequestParam("id") String id)

2.2

void exportExcel(HttpServletResponse response, ExchangeCodeListParams params){
        Response resp =  AServiceFeign.export(params.getTaskId());
        Response.Body body = resp.body();
        response.setCharacterEncoding("UTF-8");
        response.setHeader("content-Type", "application/vnd.ms-excel");
        response.setHeader("Content-Disposition", "attachment;filename=data.xls");
        //将响应转为InputStream输入流
        try (InputStream inputStream = body.asInputStream();
             OutputStream outputStream = response.getOutputStream()) {
            ByteArrayOutputStream output = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024*5];
            int n = 0;
            while (-1 != (n = inputStream.read(buffer))) {
                output.write(buffer, 0, n);
            }
            //获取输入流的长度
            byte[] b = output.toByteArray();
            //将输入流的数据读取到字节数组b中
            inputStream.read(b);
            //将字节数组b中的数据写到响应输出流中
            outputStream.write(b);
            outputStream.flush();
        } catch (IOException e) {
            e.printStackTrace();
            throw new BusinessException("exportExcel IO Exception", e);
        }finally {
            resp.close();
        }
    }

这样就可以了。

前面因为Feign前面没加Respon,结果一直导不出来。

Feign跨服务调用导出(下载)接口 目录前言Feign调用流程 前言 今天有个需求要跨服务调用一个导出excel的接口,两个服务都在同一注册中心上,所以使用Feign调用较为方便,下面记录一下 Feign调用 Feign调用导出接口的方法的出参不是和提供端的方法出入参一样就可以了,一般我们的导出接口都是无返回,直接将内容输出到response中,所以我们调用导出接口的feignt方法需要使用feign提供的Response来接收响应,如下 Feign方法: import feign.Response; /** * 使用Feign调用导出接 阅读详情

相关推荐

【Java实战】Feign调用文件下载服务接口实现文件下载功能

以上就是今天要讲的内容,本文仅仅简单介绍了Feign调用文件下载服务接口功能的实现,以上方法亲测有效,希望能给大家一个参考。

~~~~~~~BUG FLY~~~~~~~~~ 6532

Hutool---Excel

Hutool使用 Excel生成工具学习记录一下 官网链接: https://www.hutool.cn/ 添加依赖,在项目的pom.xml的dependencies中加入以下内容: <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.6.7</version> </dep

qq_44692851的博客 2136

UE5 AI寻路全攻略:从Nav Mesh基础到动态障碍与多模式导航

在游戏开发中,AI寻路是赋予非玩家角色自主移动能力的关键技术。其核心原理是通过预计算或实时生成一个表示可行走区域的导航网格,AI路径查找算法(如A*)在此网格上规划最优路径。这项技术的价值在于,它能极大提升游戏世界的真实感和交互性,使NPC能够智能地绕开障碍、穿越复杂地形,广泛应用于开放世界、RPG、策略游戏等多种场景。本文聚焦于虚幻引擎5的寻路系统,深入探讨其寻路网格体配置。针对动态环境挑战,文章详细介绍了如何利用寻路修饰体积和动态障碍物组件实现导航网格的实时更新;同时,针对游泳、飞行等特殊移动需求,解析

weixin_33226816的博客 360

SpringBoot 使用 Feign进行远程调用文件导出

SpringBoot 使用 Feign进行远程调用文件导出

m0_64862907的博客 840

ICC2 高效上手 | create_lib 命令全攻略:数字后端工程师的必备秘籍

如果技术文件中的足够满足你的需求,你可以设置,然后运行create_lib命令;如果技术文件的精度不够,那就需要显式地使用来定义缩放因子。在使用create_lib必须显式指定库名(如my_libA推荐优先通过或来关联技术数据,确保你的设计库有正确的工艺基础。显式地通过-ref_libs定义参考库,这样可以避免工具自动推导时可能出现的冲突。慎重使用,只有在对数据精度有特殊需求时才显式指定,并且要确保它与参考库的缩放因子一致。

weixin_50820814的博客 1594

从零构建:用Simulink搭建固定翼无人机六自由度模型的避坑指南

本文详细介绍了使用Simulink从零构建固定翼无人机六自由度动力学模型的完整流程和避坑指南。重点解析了模型架构设计、气动力计算、参数配置、仿真求解器选择等关键环节的常见问题与解决方案,帮助开发者快速建立准确可靠的无人机控制系统仿真模型。

hhh00的博客 999

关于使用Feign来实现微服务之间的文件下载

前两天做的一个需求,需要专门为材积信息而新启一个服务,其他系统调用此服务来进行获取产品的一些材积信息以及总体积、总重量。这样在调用方使用openFeign调用时首先可以正常的获取到这个文件流的字节数组,之后再对其进行处理就ok,下面提供一下代码。调用方使用ResponseEntity进行接收,获取到当中的字节数组,使用字节流来进行处理,把其写入到本服务的response当中,这个问题就可迎刃而解。在微服务当中,不同的服务之间需要进行通信,不乏微服务之间使用feign进行文件的下载上传使用场景。

FuzengQiu的博客 3159

光耦选型避坑指南:如何根据CTR参数精准计算输入输出电阻(附24V工业场景实例)

本文深入解析光耦选型核心,聚焦电流传输比(CTR)参数及其衰减特性,提供从输出需求反向推导输入输出电阻的精准计算方法。文章以24V工业场景为例,结合光电耦合器数据手册,详细阐述了如何根据CTR最小值进行降额设计,并给出包含反接保护、TVS管等在内的完整保护电路方案,旨在构建高可靠、长寿命的信号隔离电路,避免因选型或设计不当导致的系统故障。

nept的博客 1040

Feign跨服务下载文件; getOutputStream() has already been called for this response

项目场景: 接手一个老的项目,项目中导出Activiti在线设计的模型有问题,在代码中是A服务通过Feign调用B服务来实现的。 问题描述: 点击导出后在A服务直接报getOutputStream() has already been called for this response错误,原因是response已经被占用了,后来经过查资料发现是Feign的问题。 原因分析: Feign在跨服务下载文件时,需要用到Feign提供的Request来做一次中继操作 解决方案: 1.在客户端 import java

qq_39517116的博客 1444

浅谈武术擂台格斗机器人大赛

武术擂台机器人赛是工科类专业的一个跨学科的竞赛项目,它涵盖了机械结构、硬件电路和计算机程序等技术领域。笔者在校期间有幸参加过四次这样的比赛,有成功也有失败,对此深有感悟。本文仅为个人观点,有说得不对的地方,望积极指出,希望能帮助到有需要的人。

weixin_43811044的博客 1万+

**Coffin-Manson 模型**在半导体功率循环测试中的理论背景、数学形式、应用场景,以及如何使用 **C#** 编程语言进行具体实现

Coffin-Manson 模型最初用于描述金属材料在低周疲劳(Low-Cycle Fatigue, LCF)下的寿命,后来被广泛应用于半导体功率器件(如 IGBT、MOSFET)的可靠性分析,特别是在功率循环测试中。如果你有具体数据(如 CSV 文件)、更复杂的模型要求(如 Bayerer 模型)或特定可视化需求,请提供,我可以进一步优化代码或添加功能!以下代码实现基本模型 ( N_f = A \cdot (\Delta T_j)^{-n} ) 的拟合,生成拟合曲线并预测寿命。我会结合你之前提到的。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 480

FeignClient 跨服务上传文件、导出Excel

FeignClient 跨服务上传文件、导出Excelservice 服务client 服务 分为两个 project,service 提供上传、下载的基础服务。client 作为被外部调用的服务。 本文使用的 spring boot 版本 是 2.2.5.RELEASE。 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent&

赵丙双的博客 3380

GIS常用符号化色带(超级色带)根据python制作

GIS自带的色带比较单一,今天分享一款色带,应用之后大家出图的时候可以选择更多的配色,符号化/点击色块/样式引用/将样式添加至列表即可。色带类型比较多,大家可以自己尝试下不同的风格。简单符号化一下,看看效果。以中国县级行政区划为例,

J_Giser的博客 2637

java使用feign接口下载文件

1、feign接口定义(注意:Response 导包) import feign.Response; /** * 导出定义 */ @PostMapping(value="/xx/export") Response export(@RequestBody JSONObject data); 2、接收feign的流,写入response中 ...

hgg923的专栏 6441

第五章 TTM 后备管理:5.11 迁移的执行

本文讨论 TTM 框架中缓冲区对象(BO)数据搬运的完整流程,涵盖搬运入口 ttm_bo_handle_move_mem() 的执行步骤、驱动 move 回调的约定、同步辅助函数的使用、多跳迁移机制及异步流水化搬运的处理。重点说明了中转位置的引入原因与执行逻辑,以及通过 ghost 对象和 fence 机制解决异步搬运中的资源释放与访问一致性问题,确保数据安全迁移的同时支持 GPU 异步操作。

图形/计算GPU的驱动与虚拟化技术分享园地 1708

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

文件压缩下载,Feign文件流传递

文件下载,压缩,解压

GM_115的博客 4555

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Feign遇到的坑:调用生产方获取响应流。

遇到个小坑,记录下​。 ​ 在SpringBoot微服务架构中,通常都是使用eureka作为注册中心管理服务,使用feign来相互调用各个服务进行服务间的沟通。 一般情况下去调用生产方的请求都是有返回值的,使用feign调用在消费方拿到生产方的返回值后去做处理,意思就是说生产方服务的请求是什么类型的返回值那么使用feign调用的时候就要接收什么类型的返回值: 例如: A服务生产方: Feign调用: B服务消费方: 以上可以看出当使用feign去调用生产方的请求时 参数和返回值必须保持一直才可以正常

qq_44322555的博客 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

SpringCloud Feign 文件下载

客户端Controller /** * 导出查询结果到excel */ @RequestMapping(value = "/export", produces = MediaType.TEXT_HTML_VALUE) public void exportOrgExcel(@RequestBody(required = false) OrganizationR...

hoho 454

easyexcel结合feign,文件如何导出的问题

问题描述:直接调用policy服务的导出接口可以正常导出。admin服务调用policy服务导出接口文件无法导出。-admin接口以及响应体转换方法。因为使用了feign,导致响应体结构变化,需要从里面拿到输入输出流。结论:policy服务导出后不能提前关闭流,feign调用后需要将响应体转换。

Li_jiazhao的博客 398

【FeignClient】feignClient跨服务下载文件

背景:服务端提供了一个下载服务,用FeignClient调用该服务时发生错误。 错误信息为:getOutputStream() has already been called for this response 此错误原因是response已经被调用 解决方法:需要用到Feign提供的Request来做一次中继操作 代码: 服务端: /** * 下载文件 * @param filePath 文件路径 * @param downloadName 下载后的文件名

心生的小鱼专栏 2005

SpringBoot与SpringCloud:使用EasyExcel进行excel文件的导出

一般来说,实现文件的导出使用的是 Apache POI 以及 Alibaba EasyExcel 我选择了第二个 Alibaba EasyExcel ,主要是 导出的内容不需要随机指定 简单,上手快 EasyExcel的官方文档 狂神说Java】POI及EasyExcel一小时搞定通俗易懂 1. 导入依赖 <dependency> <groupId>com.alibaba</groupId> &l.

人类所有真实的快乐,一定是恒久的努力 1755

openfeign调用excel导出接口

1.常见的excel导出核心方式 excel导出在企业应用中比较常见的. 我们一般都是把接口的 header 的 “ContentType” 置为 “application/octet-stream”, 将 “Content-Disposition” 置为 "attachment;filename=${fileName}" 之后我们将excel的流写入 response 的 outputstrea...

m0_37868722的博客 2943

easyexcel填充数据和feign远程调用下载文件

1.数据填充 easyexcel官方文档: https://www.yuque.com/easyexcel/doc/easyexcel 填充的模板

菜鸡的博客 902

处理服务间feign 上传下载

springboot版本: 2.2.9 springcloud版本: Hoxton.SR3 处理上传(服务调用端): 编码器配置 /** * @author Lee * @description feign 文件转码器 * @date 2020/11/26 2:10 下午 **/ public class FeignMultipartSupportConfig { @Autowired private ObjectFactory<HttpMessageConverters&g

Lee的程序空间 308

spring-cloud-feign 文件上传与下载

搭建好简单版本的feign客户端与服务端,本文基于简单版本进行扩展,支持文件上传与下载。 客户端 1.添加maven依赖 <!-- 引入文件feign文件上传依赖 --> <dependency> <groupId>io.github.openfeign.form</groupId> <artifactId>feign-form</artifactI..

houkai的博客 518

问题记录_SpringCloud:Feign获取文件流

遇到一个场景需要调用另一个服务的文件下载接口,拿到文件后进行后续处理,做如下记录

阿呆 1586
上一篇: 基于Docker搭建Canal
下一篇: Tomcat版本大于7.0.72引起get请求400问题
AAA821
博客等级 码龄14年 19粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值