位置: 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信息

  • 分享经验,无线端引流超强方法(无线分享怎么弄)

    分享经验,无线端引流超强方法(无线分享怎么弄)

  • vivox70pro刷新率怎么调(vivox70pro刷新率多少Hz)

    vivox70pro刷新率怎么调(vivox70pro刷新率多少Hz)

  • OPPO手机的耳机模式怎么关闭(oppo手机的耳机孔)

    OPPO手机的耳机模式怎么关闭(oppo手机的耳机孔)

  • 创维t2和t2pro的区别(创维t2评测)

    创维t2和t2pro的区别(创维t2评测)

  • 苹果长按图标不出现删除(苹果长按图标不能移动)

    苹果长按图标不出现删除(苹果长按图标不能移动)

  • 快手头像变白是怎么回事啊(快手头像变成白色)

    快手头像变白是怎么回事啊(快手头像变成白色)

  • 荣耀5手环nfc版和标准版有什么不同(荣耀5手环nfc版怎么设置公交卡)

    荣耀5手环nfc版和标准版有什么不同(荣耀5手环nfc版怎么设置公交卡)

  • 手机一般怎样截屏(手机咋个截屏)

    手机一般怎样截屏(手机咋个截屏)

  • 淘宝好评返现商家不给怎么办(淘宝好评返现商家说24小时到账是真的吗)

    淘宝好评返现商家不给怎么办(淘宝好评返现商家说24小时到账是真的吗)

  • 淘宝的销量是一个月的还是所有的(淘宝的销量是一个月一清零吗)

    淘宝的销量是一个月的还是所有的(淘宝的销量是一个月一清零吗)

  • 微信标签删除后别人能看到吗(微信标签删除后之前的状态能看到吗)

    微信标签删除后别人能看到吗(微信标签删除后之前的状态能看到吗)

  • powerpoint动画分为哪四类(ppt中的动画分为几种类型)

    powerpoint动画分为哪四类(ppt中的动画分为几种类型)

  • 唯品会付款方式有哪些(唯品会付款方式怎么改)

    唯品会付款方式有哪些(唯品会付款方式怎么改)

  • 微信解封的6种方法(微信解封的6种方法视频教程)

    微信解封的6种方法(微信解封的6种方法视频教程)

  • 微信怎样关掉支付密码(微信怎么关掉支付)

    微信怎样关掉支付密码(微信怎么关掉支付)

  • 华为手机免打扰怎么设置时间(华为手机免打扰设置方法)

    华为手机免打扰怎么设置时间(华为手机免打扰设置方法)

  • 临时会话被屏蔽是啥样(临时会话被屏蔽有提示吗)

    临时会话被屏蔽是啥样(临时会话被屏蔽有提示吗)

  • 实况照片怎么拍3秒(荣耀实况照片怎么拍)

    实况照片怎么拍3秒(荣耀实况照片怎么拍)

  • 华为nova3i宽度(华为nova3i机身尺寸)

    华为nova3i宽度(华为nova3i机身尺寸)

  • 京东白条怎么解除(京东白条怎么解封)

    京东白条怎么解除(京东白条怎么解封)

  • 手机屏幕出现彩色条纹怎么办(手机屏幕出现彩色条纹是怎么回事)

    手机屏幕出现彩色条纹怎么办(手机屏幕出现彩色条纹是怎么回事)

  • 苹果x有无线耳机吗(苹果x有无线耳机孔吗)

    苹果x有无线耳机吗(苹果x有无线耳机孔吗)

  • 支付宝账号在哪里查看(百度绑定的支付宝账号在哪)

    支付宝账号在哪里查看(百度绑定的支付宝账号在哪)

  • 云闪付收款支持哪些(云闪付收款支持信用卡付款吗)

    云闪付收款支持哪些(云闪付收款支持信用卡付款吗)

  • 苹果内存灰色怎么删除(苹果内存灰色怎么处理)

    苹果内存灰色怎么删除(苹果内存灰色怎么处理)

  • 爬虫技术是什么(爬虫技术是什么时候出现的)

    爬虫技术是什么(爬虫技术是什么时候出现的)

  • 手机wps文件存储位置(手机wps文件存储路径在哪)

    手机wps文件存储位置(手机wps文件存储路径在哪)

  • 哔哩哔哩如何投屏(哔哩哔哩如何投稿视频)

    哔哩哔哩如何投屏(哔哩哔哩如何投稿视频)

  • phpcms用户登录失败怎么办(php登录不了)

    phpcms用户登录失败怎么办(php登录不了)

  • 应付职工薪酬在资产负债表怎么填
  • 未休年假补助
  • 财政补贴交不交印花税
  • 违约金并用
  • 补交以前年度房产税和滞纳金需要更改以前年度报表吗
  • 行政单位盘盈固定资产应按什么入账
  • 折扣金额发票
  • 销售金额计算抵增值税吗
  • 股权计税成本如何计算?
  • 小企业汇算清缴所得税分录
  • 预收账款确认收入摘要怎么写
  • 事业单位收个人部分社保怎么入账
  • 增值税负数如何计算
  • 前期物业管理公司
  • 收到政府补助用于购买环保设备
  • 合伙企业累进税率
  • 应交税费待抵扣进项税额是什么科目
  • 年末计提银行借款利息
  • 劳务公司费用成本怎么算
  • 当月取得的进项必须当月勾选吗
  • 购进虚假发票进项税转出的会计处理?
  • 计划成本是什么科目
  • 发票冲红怎么开具
  • 银行多收的开户费怎么办
  • php tr td
  • 商品换购是什么意思
  • elementui ts
  • 出口商品怎么做分录
  • 购销合同印花税税率2023
  • yolov3训练
  • 废旧物资经营单位增值税税率
  • 长期待摊费用的会计分录
  • jdbc连接mysql的url怎么写
  • element_at
  • ajax可以在静态页面
  • Docker 搭建api
  • 印花税申报时间填错了怎么处理?
  • opengl 帧率
  • c+c#
  • 房产自用改为出租如何申报房产税
  • 过路费发票抵扣2023新规定
  • 银行转账回执单掉了
  • php策略模式和工厂模式的区别
  • 酒店低值易耗品怎么摊销
  • 还款利息
  • 代扣代缴个人所得税奖励金
  • 总账和成本哪个工资高
  • 企业增资相关知识点
  • 员工的提成
  • 小规模纳税人开专票需要交税吗
  • 拆迁补偿款收税吗
  • 周转材料怎么做分录
  • 固定资产的折旧方法有哪些
  • 融资租赁租金利息怎么算
  • 用友反结账怎么操作
  • 试算不平衡的原因是什么
  • 建筑施工企业涉诉案件多的原因
  • 规划设计费收费依据
  • 收付实现制与权责发生制的例题
  • 房地产开发企业电费做什么科目
  • 质量有问题不给退怎么办
  • encore是什么软件
  • windowsxp文件夹里面的文件突然消失
  • centos 安装7z
  • PureVoice.exe - PureVoice是什么进程 有什么用
  • 安装win7旗舰版变了家庭版
  • python函数enumerate
  • unity物理效果
  • node.js请求HTTPS报错:UNABLE_TO_VERIFY_LEAF_SIGNATURE的解决方法
  • linux4个主要部分
  • unity ugu
  • 用python写个脚本
  • json数据格式的理解
  • js中的?
  • 工商局税收
  • 新能源车异地购车
  • 小规模纳税人税费怎么算
  • 小微企业房产税优惠减免政策
  • 初级会计职称可以挂靠吗
  • 辽宁朝阳丧葬费标准2022
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设