当前位置: 首页 > news >正文

React + hooks + Ts 实现将后端响应的文件流(如Pdf)输出到浏览器下载

React 篇

一些关于react 学习与总结
这篇是记录开发中关于实现将后端响应的文件流(如Pdf)输出到浏览器下载,基于React + Hooks + Ts。


开发场景:

实现将后端响应的文件流(如Pdf)输出到浏览器下载,


思路:

使用axios库来发送请求并接收后端响应的pdf文件,然后使用Blob对象将响应数据转换为二进制数据,最后使用URL.createObjectURL()方法将二进制数据转换为URL,然后将URL赋值给a标签的href属性,再使用a标签的click()方法触发下载。

实现过程:

核心代码如下:

<Col span={22} ><Button type="primary" size={"large"} onClick={handleDownload} disabled={loading}>{loading ? '下载中...' : '下载文件'}{/*{pdfUrl && <iframe src={pdfUrl} width="100%" height="500px" />}*/}</Button>
</Col>

具体实现方法如下

   const [loading, setLoading] = useState<boolean>(false);  //钩子函数const [pdfUrl, setPdfUrl] = useState('');const handleDownload = async() =>{setLoading(true);try {const response = await axios.get("http://47.98.103:8887/oms/pdf/export_pdf_test", {responseType: 'blob', // 告诉axios响应类型为二进制数据params:{id:companyId  //参数:传给后端的是 id 已经获取到了}});const blob = new Blob([response.data], { type: 'application/pdf' }); // 将响应数据转换为二进制数据const url = URL.createObjectURL(blob); // 将二进制数据转换为URLsetPdfUrl(url); // 将URL保存到state中const link = document.createElement('a');link.href = url;link.download = '企业工商年报.pdf';link.click(); // 触发下载// const fileName = response.headers['content-disposition'].split('=')[1]; // 从响应头中获取文件名// saveAs(response.data, fileName); // 使用FileSaver.js保存文件} catch (error) {message.error("服务器繁忙,请稍后重试")console.error(error);} finally {setLoading(false);}}

总结

使用useState钩子来保存PDF文件的URL。当用户点击下载按钮时,我们使用axios发送GET请求,并将响应类型设置为blob。然后,我们使用Blob对象将响应数据转换为二进制数据,并使用URL.createObjectURL()方法将其转换为URL。最后,我们将URL保存到state中,并使用a标签的click()方法触发下载

相关文章:

React + hooks + Ts 实现将后端响应的文件流(如Pdf)输出到浏览器下载

React 篇 一些关于react 学习与总结 这篇是记录开发中关于实现将后端响应的文件流&#xff08;如Pdf&#xff09;输出到浏览器下载&#xff0c;基于React Hooks Ts。 开发场景&#xff1a; 实现将后端响应的文件流&#xff08;如Pdf&#xff09;输出到浏览器下载&#xff0c;…...

大数据基础设施搭建 - JDK

一、创建目录 需要在root账号下操作&#xff0c;因为/目录下只能用root账号创建目录 1.1 创建目录 [roothadoop102 ~]# mkdir /opt/software/ [roothadoop102 ~]# mkdir /opt/module/1.2 修改权限 修改module、software文件夹的所有者和所属组均为hadoop用户&#xff0c;远程使…...

从0到0.01入门React | 010.精选 React 面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…...

Docker启动SRS流媒体服务器

一、安装Docker 1.1、下载windows桌面版Windows 1.2、配置镜像 镜像加速器镜像加速器地址Docker 中国官方镜像https://registry.docker-cn.comDaoCloud 镜像站http://f1361db2.m.daocloud.ioAzure 中国镜像https://dockerhub.azk8s.cn科大镜像站https://docker.mirrors.ustc…...

php+MySQL防止sql注入

1、使用预处理语句&#xff08;Prepared Statements&#xff09;&#xff1a;预处理语句能够防止攻击者利用用户输入来篡改SQL语句&#xff0c;同时也能提高执行效率。通过将用户的输入参数与SQL语句分离&#xff0c;确保参数以安全的方式传递给数据库引擎&#xff0c;避免拼接…...

git 删除远程非主分支

git删除远程分支问题及git批量删除已合并的远程分支 - joshua317的博客 git push origin --delete branch-name 本版本Gitlab没有设置按钮&#xff0c;所以不能在网页上删除项目。但是可以在本地使用上述命令来删除远程仓库中非主分支的分支。 测试过不论在哪个分支操作都可…...

【MySQL学习】C++外部调用

#include "mysql.h" MYSQL *mysql; MYSQL_RES *rec; MYSQL_ROW row; &#xff08;1&#xff09;连接 char *server "localhost"; char *user "root"; char *password "hello"; char *database "mysql"; mysql mysql_i…...

Backblaze 2023 Q3硬盘故障质量报告解读

作为一家在2021年在美国纳斯达克上市的云端备份公司&#xff0c;Backblaze一直保持着对外定期发布HDD和SSD的故障率稳定性质量报告&#xff0c;给大家提供了一份真实应用场景下的稳定性分析参考数据。2023年度之前发布的两次报告&#xff0c;请参考&#xff1a; Backblaze发布2…...

docker安装elasticsearch,elasticsearch-head

安装elasticsearch 1、执行命令&#xff1a;docker pull elasticsearch:8.11.1 2、执行命令&#xff1a;docker run --name elastic -p 9200:9200 -p 9300:9300 -e "discovery.typesingle-node" -d elasticsearch:8.11.1 3、执行命令&#xff1a;docker exec -it …...

rabbitmq 集群搭建

RabbitMQ集群介绍 RabbitMQ集群是一组RabbitMQ节点&#xff08;broker&#xff09;的集合&#xff0c;它们一起工作以提供高可用性和可伸缩性服务。 RabbitMQ集群中的节点可以在同一物理服务器或不同的物理服务器上运行。 RabbitMQ集群的工作原理是&#xff0c;每个节点在一个…...

【云原生-Kurbernets篇】Kurbernets集群的调度策略

调度 一、Kurbernetes的list-watch机制1.1 list-watch机制简介1.2 创建pod的流程&#xff08;结合list-watch机制&#xff09; 二、Scheduler的调度策略2.1 简介2.2 预选策略&#xff08;predicate&#xff09;2.3 优选策略&#xff08;priorities&#xff09; 三、标签管理3.1…...

Unity中Shader矩阵的乘法

文章目录 前言一、矩阵乘以标量二、矩阵和矩阵相乘1、第一个矩阵的列数必须 与 第二个矩阵的行数相等&#xff0c;否则无法相乘&#xff01;2、相乘的结果矩阵&#xff0c;行数由第一个矩阵的行数决定&#xff0c;列数由第二个矩阵的列数决定&#xff01; 三、单位矩阵四、矩阵…...

C++ STL简介

1. 什么是STL STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且是一个包罗数据结构与算法的软件框架。 2. STL的版本 原始版本 Alexander Stepanov、Meng Lee 在惠普实验室…...

如何优雅的使用contorller层

一个完整的后端请求由 4 部分组成&#xff1a; 接口地址&#xff08;也就是 URL 地址&#xff09;请求方式&#xff08;一般就是 get、set&#xff0c;当然还有 put、delete&#xff09;请求数据&#xff08;request&#xff0c;有 head 跟 body&#xff09;响应数据&#xff…...

发现区块链世界的新大门——AppBag.io DApp导航网站全面解析

随着区块链技术的飞速发展&#xff0c;分布式应用&#xff08;DApp&#xff09;个充满创新和可能性的领域里&#xff0c;appbag.io DApp导航网站应运而生&#xff0c;为您打开探索区块链世界的新大门。 区块链应用的集大成者 AppBag.io DApp导航网站不仅是一个DApp的集散地&a…...

C#多线程Thread、Task

在C#中&#xff0c;线程可以用于完成需要耗费较长时间的操作&#xff0c;而不会阻塞用户界面。一个程序可以有多个线程&#xff0c;每个线程可以并行执行代码。 在C#中&#xff0c;可以使用System.Threading.Thread类来创建和控制线程&#xff0c;使用System.Threading.Mutex类…...

Qt QWebSocket实现JS调用C++

目录 前言1、QWebChannel如何与网页通信2、QWebSocketQWebChannel与网页通信2.1 WebSocketTransport2.2 WebSocketClientWrapper2.3 初始化WebSocket服务器2.4 前端网页代码修改 总结 前言 本篇主要介绍实现JS调用C的另一种方式&#xff0c;即QWebSocketQWebChannel。与之前的…...

Android Matrix的使用详解(通过矩阵获取到图片缩放比例和角度)

网上查了好久相关的资料&#xff0c;都没有明确的答案。最终通过多次测试结果&#xff0c;结合安卓定义的矩阵含义&#xff0c;推算出来矩阵的数学含义以及相关的计算公式 1.获取Matrix矩阵&#xff1a; Matrix matrix new Matrix(); float[] matrixValues new float[9]; …...

【Spring】bean的生命周期

这里写目录标题 1. 在类中提供生命周期控制方法&#xff0c;并在配置文件中配置init-method&destroy-method&#xff08;配置&#xff09;关闭容器操作1&#xff1a;ctx.close()关闭容器操作2&#xff1a;关闭钩子&#xff1a;ctx.registerShutdownHook() 2. 实现接口来做和…...

C#运算符重载

运算符重载允许你重新定义内置运算符&#xff08;如、-、*等&#xff09;的行为&#xff0c;以便它们可以用于自定义类型&#xff08;类/结构体&#xff09;。通过运算符重载&#xff0c;你可以为自定义类型创建更直观和灵活的操作。 在C#中&#xff0c;可以重载的运算符如下&…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏

一、引言 在深度学习中&#xff0c;我们训练出的神经网络往往非常庞大&#xff08;比如像 ResNet、YOLOv8、Vision Transformer&#xff09;&#xff0c;虽然精度很高&#xff0c;但“太重”了&#xff0c;运行起来很慢&#xff0c;占用内存大&#xff0c;不适合部署到手机、摄…...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中&#xff0c;工业自动化网关起着至关重要的作用&#xff0c;尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关&#xff0c;为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多&#xff0c;其中不少设备采用Devicenet协议。Devicen…...

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践&#xff0c;很多人以为AI已经强大到不需要程序员了&#xff0c;其实不是&#xff0c;AI更加需要程序员&#xff0c;普通人…...

Python爬虫实战:研究Restkit库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的有价值数据。如何高效地采集这些数据并将其应用于实际业务中,成为了许多企业和开发者关注的焦点。网络爬虫技术作为一种自动化的数据采集工具,可以帮助我们从网页中提取所需的信息。而 RESTful API …...