当前位置: 首页 > 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()方法触发下载

http://www.lryc.cn/news/232381.html

相关文章:

  • 大数据基础设施搭建 - JDK
  • 从0到0.01入门React | 010.精选 React 面试题
  • Docker启动SRS流媒体服务器
  • php+MySQL防止sql注入
  • git 删除远程非主分支
  • 【MySQL学习】C++外部调用
  • Backblaze 2023 Q3硬盘故障质量报告解读
  • docker安装elasticsearch,elasticsearch-head
  • rabbitmq 集群搭建
  • 【云原生-Kurbernets篇】Kurbernets集群的调度策略
  • Unity中Shader矩阵的乘法
  • C++ STL简介
  • 如何优雅的使用contorller层
  • 发现区块链世界的新大门——AppBag.io DApp导航网站全面解析
  • C#多线程Thread、Task
  • Qt QWebSocket实现JS调用C++
  • Android Matrix的使用详解(通过矩阵获取到图片缩放比例和角度)
  • 【Spring】bean的生命周期
  • C#运算符重载
  • 【L2GD】: 无环局部梯度下降
  • 2023-11-14 LeetCode每日一题(阈值距离内邻居最少的城市)
  • AdServices归因和iAd归因集成
  • 关于 内部类 你了解多少?(详解!!)
  • CNVD-2021-09650:锐捷NBR路由器(guestIsUp.php)RCE漏洞复现 [附POC]
  • 如何在Docker部署Draw.io绘图工具并远程访问
  • Android APK打包的过程主要步骤
  • 吃透 Spring 系列—MVC部分
  • Java面试题(每天10题)-------连载(32)
  • HDP集群Kafka开启SASLPLAINTEXT安全认证
  • 判断上颌下颌的stl模型坐标轴是否正常