前端axios请求二进制数据流转换生成PDF文件空白问题(终极解决方案)
本文章共1570字,预计阅读时间1 - 3分钟。
问题场景:
axios请求二进制数据转换生成PDF空白问题,使用axios请求后端接口,后端返回的二进制流文件,需要转换成PDF,但是在postman中直接保存文件是可以打开的;
问题描述:
请求后端接口 => 转换PDF文件 代码:
import axios from '@public/axios' // 引入封装的axios
// 请求方法如下
reqExcel: reqData =>
axios.get(`api/export`, reqData, { responseType: 'arraybuffer' }).then(res => res)
// 转换pdf
const blob = new Blob([res.data], { type: 'application/pdf' });
const url = window.URL.createObjectURL(blob);
window.open(url)
弹出出窗口打开转换之后的PDF文件为空白状态 !
原因分析:
问题分析1:responseType类型
一般二进制参数有两种:
- "arraybuffer" => response 是一个包含二进制数据的 JavaScript ArrayBuffer。
 - "blob" => response 是一个包含二进制数据的 Blob 对象。
 
这里要根据后端返回的数据类型,更换参数!
问题分析2: axios封装问题
更换了各种responseType的类型,使用了各种PDF生产方法,打开的一直是空白状态,网上找了各种教程,一直没有好的解决方法。
这时候我怀疑起了axios的问题,如上代码,在使用axios之前,我们对其进行了各种错误的拦截、请求头加入token、判断错误码等等一系列的操作,然后引入axios。
没错,答案就在这里,如果你究极一切方法都没有解决PDF空白问题,那么一定是你axios封装的一些问题,这时候你直接  import axios from 'axios' // 引入原生的axios,不作封装处理 ,
问题迎刃而解!
解决方案:
使用原生的axios,不做封装处理,更改responseType类型为 blob
import axios from 'axios' // 引入原生的axios,不作封装处理
 await axios({
      method: 'GET',
      headers: { token },
      url: `api/export`,
      params: { discountPrint },
      responseType: 'blob' // 更改responseType类型为 blob
    }).then(res => {
      data = res
    }).catch(err => {
      console.log(err)
    })
// 转换pdf
const blob = new Blob([res.data], { type: 'application/pdf' });
const url = window.URL.createObjectURL(blob);
window.open(url)
至此,弹出出窗口打开的PDF文件为正常状态 问题解决!
结尾
好了,以上就是本篇全部文章内容啦。
如果遇到问题或者有其他意见可以在下方评论区贴出!
码字不易。如果觉得本篇文章对你有帮助的话,希望你可以留言点赞支持一下,非常感谢~
只要有树叶飞舞的地方,火就会燃烧,火的影子照耀着村子,新的树叶就会发芽。
前端axios请求二进制数据流转换生成PDF文件空白问题(终极解决方案)的更多相关文章
- 前端生成pdf文件之pdfmake.js
		
转载:点击查看原文 pdfmake.js是一个简单的生成pdf文件的插件. pdfmake.js https://files.cnblogs.com/files/s313139232/pdfm ...
 - Itext生成pdf文件
		
来源:https://my.oschina.net/lujianing/blog/894365 1.背景 在某些业务场景中,需要提供相关的电子凭证,比如网银/支付宝中转账的电子回单,签约的电子合同等. ...
 - wkhtmltopdf+itext实现html生成pdf文件的打印下载(适用于linux及windows)
		
目中遇到个根据html转Java的功能,在java中我们itext可以快速的实现pdf打印下载的功能,在itext中我们一般有以下三中方式实现 配置pdf模板,通过Adobe Acrobat 来设置域 ...
 - [轉載]史上最强php生成pdf文件,html转pdf文件方法
		
之前有个客户需要把一些html页面生成pdf文件,然后我就找一些用php把html页面围成pdf文件的类.方法是可谓是找了很多很多,什么html2pdf,pdflib,FPDF这些都试过了,但是都没有 ...
 - 怎么用PHP在HTML中生成PDF文件
		
原文:Generate PDF from html using PHP 译文:使用PHP在html中生成PDF 译者:dwqs 利用PHP编码生成PDF文件是一个非常耗时的工作.在早期,开发者使用PH ...
 - 史上最强php生成pdf文件,html转pdf文件方法
		
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...
 - java调用wkhtmltopdf生成pdf文件,美观,省事
		
最近项目需要导出企业风险报告,文件格式为pdf,于是搜了一大批文章都是什么Jasper Report,iText ,flying sauser ,都尝试了一遍,感觉不是我想要的效果, 需要自己调整好多 ...
 - OpenOffice将MS docx转换成pdf文件偶数页眉不显示问题解决办法
		
OpenOffice版本:4.0(Windows.Linux下测试都出现问题) MS Office版本:2007 问题描述 使用OpenOffice将MS的docx文件转换为pdf文件时,docx文件 ...
 - 使用abcpdf将html转换成pdf文件
		
ABCpdf.NET使用介绍 最新做一个项目需要生成pdf文档以供打印,研究决定使用abcpdf这款组件,先针对其使用方法做一个简单的总结介绍以给有需要的朋友做参考. 一. ABCpdf.NET简单介 ...
 
随机推荐
- 【Uva1025 A Spy in the Metro】动态规划
			
题目描述 某城市地铁是线性的,有n(2≤n≤50)个车站,从左到右编号1~n.有M1辆列车从第1站开始往右开,还有M2辆列车从第n站开始往左开.列车在相邻站台间所需的运行时间是固定的,因为所有列车的运 ...
 - odoo里面批量上传图片
			
import os import base64 def base_data_product_image(self): """ odoo里批量创建产品,并上传图片 图片为b ...
 - odoo里的rpc用法
			
import odoorpcdb_name = 'test-12'user_name = 'admin'password = 'admin'# Prepare the connection to th ...
 - Linux开机以root账户自动登录
			
最近我们的自动化测试平台需要支持中标麒麟系统,对于我们来说要让这个系统支持分布式自动化测试,最重要的一点就是虚拟机启动后自动以root账户登录系统,并且执行我们的环境配置脚本,那么如何能让它开启自动登 ...
 - 键盘和鼠标闲置超时时关闭显示器并锁定电脑桌面的AutoHotkey脚本 2019年11月24日写
			
/* 键盘和鼠标闲置超时时关闭显示器并锁定电脑桌面的AutoHotkey脚本 2019年11月24日写 在电脑桌面锁定时移动鼠标就会显示登录界面,此时即使超过电源设置的时间电脑也不会关闭显示器使得屏幕 ...
 - ERROR:  database "db" is being accessed by other users
			
执行DROP DATABASE testdb;的时候提示: ERROR: database "testdb" is being accessed by other users DE ...
 - mysql的安装,一步一步的教你
			
1.下载mysql安装包 ,我这里安装的是mysql-5.6.41-winx64 (https://downloads.mysql.com/archives/community/) 选择自己的版本 我 ...
 - BUUCTF[强网杯 2019]随便注(堆叠注入)
			
记一道堆叠注入的题.也是刷BUU的第一道题. ?inject=1' 报错 ?inject=1'--+ //正常 存在注入的.正常查询字段数,字段数为2.在联合查询的时候给了新提示 ?inject=0' ...
 - 收到字节月薪35k Offer,揭秘面试流程及考点
			
前段时间,有个朋友又出去面试了,这次他面试目标比较清晰,面的都是业务量大.业务比较核心的部门.前前后后去了不少公司,几家大厂里,他说给他印象最深的是字节. 
			
注:本文使用docker for windows模拟构建zookeeper集群,在linux系统下,可使用同样的docker命令构建 参考url:https://github.com/31z4/zoo ...
 
			
		