位置: IT常识 - 正文

Vue 采用blob下载后端返回的pdf流或者excel流文件乱码问题解决方案(vue blob下载文件)

编辑:rootadmin
Vue 采用blob下载后端返回的pdf流或者excel流文件乱码问题解决方案 流文件乱码问题解决方案问题介绍:一、前端方式解决:二、后端方式解决:三、文件预览实现四、点击按钮打开新窗口预览问题介绍:

推荐整理分享Vue 采用blob下载后端返回的pdf流或者excel流文件乱码问题解决方案(vue blob下载文件),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue blob流 转成 file文件,vue实现下载文件,vue.observable,vue blob对象,vue blob下载文件,vue blob type,vue下载功能实现,vue blob type,内容如对您有帮助,希望把文章链接给更多的朋友!

打开或者预览全是乱码。预览pdf如下图: 解决办法:

1. 后端接口返回的blob文件流,你下载下来的文件是乱码的?

解决办法 :让你的后端设置流的编码为utf-8。请跟后端大佬说,一定要给blob格式的文件流。

2. 后端返回的blob文件流,并且已经设置了utf-8,但是你接受的接口返回值,依然是乱码?

解决办法: 肯定没有设置 responseType: “arraybuffer”。

一、前端方式解决:Vue 采用blob下载后端返回的pdf流或者excel流文件乱码问题解决方案(vue blob下载文件)

预览pdf如下图:

这个charset=utf-8一定要添加,不添加可能乱码,如果后台返回的格式里面有,那就没必要了!代码:const binaryData = []binaryData.push(res.data)// 获取blob链接this.pdfUrl = window.URL.createObjectURL(new Blob(binaryData, { type: ‘application/pdf;charset=utf-8’ }))window.open(this.pdfUrl)

pdf下载如下图:

代码如下:this.pdfUrl = window.URL.createObjectURL(new Blob([res.data], { type: application/pdf;charset=utf-8 }))const fname = 合同 // 下载文件的名字const link = document.createElement(‘a’)console.log(this.pdfUrl)link.href = this.pdfUrllink.setAttribute(‘download’, fname)document.body.appendChild(link)link.click()代码:export default { name: 'pdf', async mounted () { this.pdfHeight = '100%' this.ewpId = this.$route.query.ewpId this.pdfUrl = await this.getPdf(this.baseUrl + '/rcgl/TalPolicy/onlinePreview?id=' + this.ewpId + '&BDSOFT-TOKEN=' + this.userToken) }, data () { return { baseUrl: process.env.VUE_APP_BASE_API, pdfUrl: '', ewpId: '', pdfHeight: 0 } }, methods: { async getPdf (url) { // eslint-disable-next-line no-undef const data = await axios.get(url, { responseType: 'arraybuffer' }) const blob = new Blob([data.data], { type: 'application/pdf' }) return URL.createObjectURL(blob) } }, computed: { ...mapState('global', { userToken: state => state.token, unitId: state => state.userInfo.b00 }) }}二、后端方式解决:

因为有的文件可能含有中文,因此在文件传输过程中会涉及到编码问题。后台的代码需要将输出流的编码格式设置为UTF-8。

response.setContentType("application/octet-stream;charset=UTF-8");

另一种方式就是:(优先级最高)

response.setCharacterEncoding("UTF-8"); // 设置文件流编码格式 不然中文会乱码

这样前端接收到输出流的时候是以Blob类型接收的。

代码: @Override public void onlinePreview(String filePath, HttpServletResponse response) throws Exception { //获取文件类型 String[] str = filePath.split("\\."); if (str.length == 0) { throw new Exception("文件格式不正确"); } String suffix = str[str.length - 1]; if (!suffix.equals("txt") && !suffix.equals("doc") && !suffix.equals("docx") && !suffix.equals("xls") && !suffix.equals("xlsx") && !suffix.equals("ppt") && !suffix.equals("pptx")) { throw new Exception("文件格式不支持预览"); } InputStream in = FileConvertUtil.convertLocaleFile(filePath, suffix); response.setContentType("application/octet-stream;charset=UTF-8"); OutputStream outputStream = response.getOutputStream(); //创建存放文件内容的数组 byte[] buff = new byte[1024]; //所读取的内容使用n来接收 int n; //当没有读取完时,继续读取,循环 while ((n = in.read(buff)) != -1) { //将字节数组的数据全部写入到输出流中 outputStream.write(buff, 0, n); } //强制将缓存区的数据进行输出 outputStream.flush(); //关流 outputStream.close(); in.close(); }三、文件预览实现

controller 代码

@ApiOperation(value = "系统文件在线预览", notes = "系统文件在线预览") @GetMapping(Urls.TalPolicy.onlinePreview) public void onlinePreview(String id, HttpServletResponse response) throws Exception { Assert.notNull(id, "用户id不能为空"); TalPolicy Policy = TalPolicyService.getAllById(id); if (Policy != null) { String fid = Policy.getFileid(); if (!StringUtils.isEmpty(fid)) { SAttachmentFile sAttachmentFile = fileManagerService.getById(fid); String filePath = sAttachmentFile.getFilepath(); TalPolicyService.onlinePreview(filePath, response); } } }

service 代码

void onlinePreview(String filePath, HttpServletResponse response) throws Exception;

serviceimpl代码

@Override public void onlinePreview(String filePath, HttpServletResponse response) throws Exception { //获取文件类型 String[] str = filePath.split("\\."); if (str.length == 0) { throw new Exception("文件格式不正确"); } String suffix = str[str.length - 1]; if (!suffix.equals("txt") && !suffix.equals("doc") && !suffix.equals("docx") && !suffix.equals("xls") && !suffix.equals("xlsx") && !suffix.equals("ppt") && !suffix.equals("pptx")) { throw new Exception("文件格式不支持预览"); } InputStream in = FileConvertUtil.convertLocaleFile(filePath, suffix); response.setContentType("application/octet-stream;charset=UTF-8"); OutputStream outputStream = response.getOutputStream(); //创建存放文件内容的数组 byte[] buff = new byte[1024]; //所读取的内容使用n来接收 int n; //当没有读取完时,继续读取,循环 while ((n = in.read(buff)) != -1) { //将字节数组的数据全部写入到输出流中 outputStream.write(buff, 0, n); } //强制将缓存区的数据进行输出 outputStream.flush(); //关流 outputStream.close(); in.close(); }

工具类及其他详情步骤参考: java用openOffice实现在线预览

四、点击按钮打开新窗口预览 <el-table-column label="操作" align="center" width="120px"> <template slot-scope="scope"> <div style="line-height: 1; font-size: 0;"> <el-button size="mini" @click="prewelRow(scope.row)">查看</el-button> </div> </template> </el-table-column>data () { return { baseUrl: process.env.VUE_APP_BASE_API } },computed: { ...mapState('global', { userToken: state => state.token, unitId: state => state.userInfo.b00 }) }methods: { prewelRow: async function (row) { const pdfUrl = await this.getPdf(this.baseUrl + '/rcgl/TalPolicy/onlinePreview?id=' + row.recordid + '&TOKEN=' + this.userToken) window.open(pdfUrl) },}
本文链接地址:https://www.jiuchutong.com/zhishi/277984.html 转载请保留说明!

上一篇:QQ浏览器 for Mac版 3.0体验功能详解 书签同步手机iPad也能看(Qq浏览器里的文档怎么以文件形式发送)

下一篇:Proxmox ve(PVE) 显示CPU和硬盘温度、UPS信息

  • 电脑没有声音怎么办(电脑没有声音怎么办)(电脑没有声音怎么回事 不是静音)

    电脑没有声音怎么办(电脑没有声音怎么办)(电脑没有声音怎么回事 不是静音)

  • 桌面ie图标快捷方式(桌面ie图标删不掉)(基围虾清煮怎么做)

    桌面ie图标快捷方式(桌面ie图标删不掉)(基围虾清煮怎么做)

  • 关闭共享相簿(关闭共享相簿会删除隔空投送的照片吗)

    关闭共享相簿(关闭共享相簿会删除隔空投送的照片吗)

  • 爱奇艺会员能几个人用(免费领取爱奇艺会员)

    爱奇艺会员能几个人用(免费领取爱奇艺会员)

  • 微信上怎样解绑绑定的电话号码(微信上怎样解绑社保卡)

    微信上怎样解绑绑定的电话号码(微信上怎样解绑社保卡)

  • 手机能投屏到墙上吗(手机怎么投屏到墙上)

    手机能投屏到墙上吗(手机怎么投屏到墙上)

  • 小米miui12有什么优势(miui12真的那么好用吗)

    小米miui12有什么优势(miui12真的那么好用吗)

  • vivox20深色模式怎么开(vivo x23深色模式)

    vivox20深色模式怎么开(vivo x23深色模式)

  • 为什么ipad亮度最高还是很暗(为什么ipad亮度会自己变)

    为什么ipad亮度最高还是很暗(为什么ipad亮度会自己变)

  • 华为hms core什么意思(华为hms core有什么用)

    华为hms core什么意思(华为hms core有什么用)

  • 华为nova5和华为p30差距在哪(华为nova5和华为p20pro哪个好)

    华为nova5和华为p30差距在哪(华为nova5和华为p20pro哪个好)

  • 苹果x怎么省电(苹果x怎么省电不发热)

    苹果x怎么省电(苹果x怎么省电不发热)

  • 苹果手机二维码扫描不了怎么回事(苹果手机二维码收款到账语音提醒)

    苹果手机二维码扫描不了怎么回事(苹果手机二维码收款到账语音提醒)

  • 微信对方忙线中是为什么(微信对方忙线中符号)

    微信对方忙线中是为什么(微信对方忙线中符号)

  • word删除空白页方法(word删除空白页快捷键)

    word删除空白页方法(word删除空白页快捷键)

  • 淘宝里的旺旺号在哪里(淘宝旺旺app下载)

    淘宝里的旺旺号在哪里(淘宝旺旺app下载)

  • ipad录音功能在哪(ipad的录音功能在哪里)

    ipad录音功能在哪(ipad的录音功能在哪里)

  • 抖音上什么是青少年模式(抖音是青青呀)

    抖音上什么是青少年模式(抖音是青青呀)

  • ios9.3.5能隔空投送吗(ios9.3.5有没有隔空投送)

    ios9.3.5能隔空投送吗(ios9.3.5有没有隔空投送)

  • vivox9手机在日本能用吗(vivo手机去日本能用吗)

    vivox9手机在日本能用吗(vivo手机去日本能用吗)

  • vivoy93有没有指纹解锁(vivoy93有没有指纹)

    vivoy93有没有指纹解锁(vivoy93有没有指纹)

  • v1818a是啥手机(v1818a是什么手机)

    v1818a是啥手机(v1818a是什么手机)

  • vivox27有几种型号(vivox27分几个版本)

    vivox27有几种型号(vivox27分几个版本)

  • 华为mate20投屏到电视(华为mate20+miracast投屏)

    华为mate20投屏到电视(华为mate20+miracast投屏)

  • Win10拖动窗口时会出现黑色边框怎么解决(window10拖动窗口的手势)

    Win10拖动窗口时会出现黑色边框怎么解决(window10拖动窗口的手势)

  • 如何解决Win10wsappx内存占用过高(如何解决win10关机后usb还在供电)

    如何解决Win10wsappx内存占用过高(如何解决win10关机后usb还在供电)

  • el-upload上传文件类型大小限制+手动上传+通过后端给的接口带参数(el-upload上传文件携带参数)

    el-upload上传文件类型大小限制+手动上传+通过后端给的接口带参数(el-upload上传文件携带参数)

  • 驾驶培训 增值税
  • 工商年报认缴时间填错了
  • 企业所得税如何抵扣
  • 税控盘清卡失败
  • 企业构建固定资产支付的现金应列示在现金流量表
  • 公司基本户如何注销
  • 汇算清缴交了税怎么做分录
  • 经营罚没物品增值税计算
  • 代收货款的商品
  • 增值税专用发票电子版
  • 房地产开发企业增值税税率
  • 隔月发票红冲,交税怎么交
  • 注册资本认缴与实缴会计如何做账
  • 收入成本以前年度损益调整账务处理是怎样的?
  • 其他服务费包括哪些内容
  • 医院晚上开不开
  • 年增收节支总额与新增利税的关系
  • 红字专用发票信息表编号在哪儿
  • 简易计税劳务分包发票可以差额抵扣吗
  • 国际重复征税的类型及范围
  • 绿化租赁价格
  • 增值税专用发票的税率是多少啊
  • linux系统的
  • win10平板模式不好用
  • 电脑中病毒有什么危害
  • php判断ua
  • 公司出租房租怎么交税
  • excel js宏
  • 交通运输业成本构成比例
  • 工程施工下的间接费用下有什么科目
  • centos-6.5-i386-bin-dvd1.iso
  • uniapp封装组件,多了一层
  • css垂直导航栏
  • PHP HTTP 认证实例详解
  • php分页函数封装
  • 出口退税率和进项税额
  • 公司购买空调属于电子设备吗
  • 公帐的钱可以转到其他人帐户吗
  • 存货的计税基础公式
  • 纳税申报个税如何申报
  • 设备维修会计分录如何写
  • 股东权益包括什么科目
  • 预提费用在汇算清缴时调整,会计分录怎么做
  • 销售产品结转成本
  • 客户给我们的罚款怎么查
  • 收到现金货款怎么处理
  • 小规模出口免税是什么意思
  • 进项大于销项的原因
  • 本年负数去年正数如何算同比
  • 政府补贴是否交增值税
  • 对公账户是不是哪个银行都可以
  • 折现率的选择主要是根据什么来判断
  • mysql中自定义函数属于那个
  • win7系统如何打开
  • wkqkpick.exe进程是什么
  • rpm命令的作用是什么
  • win10系统如何删除账户
  • win7任务栏窗口总是自动切换
  • Windows RT 8.1 Update3(KB3033055)开始菜单多图欣赏
  • window10升级不了
  • [置顶] clauvio,Twitter小老鼠
  • 深入理解bootstrap
  • iframe 自适应宽度和高度
  • javascript 数组
  • html淘宝搜索框代码
  • shell中数组如何定义
  • 段正淳算正面人物吗
  • 加密批处理代码
  • python 生成器send
  • node.js的安装方法
  • python去掉末尾的换行符
  • Python3.6正式版新特性预览
  • Android的PopupWindow使用android学习之旅(四十三)
  • 税务局网上申请开票
  • 银行和税务局的关系
  • 广东税务查询系统
  • 增值电信发票
  • 青霉素过敏是因为提纯不好吗
  • 土地增值税核定征收尾盘销售
  • 美国有汽车吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设