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

  • 网店如何做微博推广活动(如何在微博开店)

    网店如何做微博推广活动(如何在微博开店)

  • qq的聊天记录在哪个文件里面(qq的聊天记录在哪个文件夹)(qq的聊天记录在电脑里都存在哪儿呀)

    qq的聊天记录在哪个文件里面(qq的聊天记录在哪个文件夹)(qq的聊天记录在电脑里都存在哪儿呀)

  • 微信怎么判断有没有人退群(微信怎么判断有没有被屏蔽)

    微信怎么判断有没有人退群(微信怎么判断有没有被屏蔽)

  • 电脑微信截屏退不出去(电脑微信截屏时退出聊天记录)

    电脑微信截屏退不出去(电脑微信截屏时退出聊天记录)

  • 安卓手机解锁忘记密码怎么办(安卓手机解锁忘记了怎么办)

    安卓手机解锁忘记密码怎么办(安卓手机解锁忘记了怎么办)

  • 放久的电脑开机无法显示(放久的电脑开不了机)

    放久的电脑开机无法显示(放久的电脑开不了机)

  • 进网许可和进网试用有什么区别(进网许可和进网试用哪个好一点)

    进网许可和进网试用有什么区别(进网许可和进网试用哪个好一点)

  • 快如闪电是MIUI哪个版本(快如闪电是什么生肖动物)

    快如闪电是MIUI哪个版本(快如闪电是什么生肖动物)

  • 小米6为什么保值(小米为什么保存的图片不在相册中显示)

    小米6为什么保值(小米为什么保存的图片不在相册中显示)

  • c盘的windows文件夹可以删除吗(c盘的windows文件夹可以移动吗)

    c盘的windows文件夹可以删除吗(c盘的windows文件夹可以移动吗)

  • 抖音充不了币怎么回事(抖音充不进抖币)

    抖音充不了币怎么回事(抖音充不进抖币)

  • 华为怎么呼叫转移到另一台手机(华为怎么呼叫转移)

    华为怎么呼叫转移到另一台手机(华为怎么呼叫转移)

  • cad粘贴不显示图形(cad粘贴没有东西出来)

    cad粘贴不显示图形(cad粘贴没有东西出来)

  • 苹果电量90用换吗(苹果电量90用换电池吗)

    苹果电量90用换吗(苹果电量90用换电池吗)

  • 网络服务器是指什么(ip服务器)

    网络服务器是指什么(ip服务器)

  • 赛扬t3500可以升级到什么cpu(赛扬t3000升级最高)

    赛扬t3500可以升级到什么cpu(赛扬t3000升级最高)

  • word怎么打出竖排字(word怎么打出竖着的括号)

    word怎么打出竖排字(word怎么打出竖着的括号)

  • 苹果手机显示网络不可用怎么办(苹果手机显示网络不稳定是什么意思)

    苹果手机显示网络不可用怎么办(苹果手机显示网络不稳定是什么意思)

  • 苹果蓝牙耳机使用方法(苹果蓝牙耳机使用寿命)

    苹果蓝牙耳机使用方法(苹果蓝牙耳机使用寿命)

  • 红米note8内存多大(红米note8存储规格)

    红米note8内存多大(红米note8存储规格)

  • 酷狗怎么弄桌面歌词(酷狗怎么弄桌面歌词手机)

    酷狗怎么弄桌面歌词(酷狗怎么弄桌面歌词手机)

  • 路由器ap隔离怎么关闭(路由器ap隔离怎么解除)

    路由器ap隔离怎么关闭(路由器ap隔离怎么解除)

  • 用手机号码怎么找人(用手机号码怎么样能找到对方位置)

    用手机号码怎么找人(用手机号码怎么样能找到对方位置)

  • vivo型号v1814a是什么(vivo型号v1813a)

    vivo型号v1814a是什么(vivo型号v1813a)

  • opporeno怎么查看最近使用(opporeno怎么查看手机温度)

    opporeno怎么查看最近使用(opporeno怎么查看手机温度)

  • 桌面布局已锁定怎么解除(桌面布局已锁定怎么卸载软件)

    桌面布局已锁定怎么解除(桌面布局已锁定怎么卸载软件)

  • 手机qq消息管理器在哪(手机QQ消息管理器)

    手机qq消息管理器在哪(手机QQ消息管理器)

  • oppo怎么用视频做锁屏(OPPO怎么用视频做铃声)

    oppo怎么用视频做锁屏(OPPO怎么用视频做铃声)

  • 阿里巴巴如何一键传淘宝(阿里巴巴如何一件起批)

    阿里巴巴如何一键传淘宝(阿里巴巴如何一件起批)

  • 迷迭香怎么养,阳台如何养殖迷迭香(图文)(迷迭香怎么养殖方法)

    迷迭香怎么养,阳台如何养殖迷迭香(图文)(迷迭香怎么养殖方法)

  • 所得税汇算清缴时间期限
  • 企业为员工代扣代缴个人所得税分录
  • 主营业务利润和利润总额
  • 无形资产的税费计入
  • 合同资产和合同负债属于什么科目
  • 固定资产进项税怎么入账
  • 新公司第一年要做亏
  • 银行承兑汇票 托收
  • 销售报废车辆按多少计提销项税额
  • 增值税过期未抵扣
  • 增值税专用发票验证真伪
  • 自然人借款给企业的涉税风险
  • 房地产企业如何计算增值税
  • 个税怎么抵
  • 留存收益会计科目编号
  • 房屋契税怎样计算公式
  • 收到电子银行承兑汇票怎么做账务处理
  • win11耳机插电脑没声音怎么办
  • 滴滴代驾报酬
  • 为什么无形资产是非流动资产
  • 硬盘安装系统方法
  • 财政部土地出让收支管理办法
  • 辞退补偿款怎么算
  • vue get方法
  • 一文读懂谢娜张杰购房跳单事件始末
  • 跨行政区域是跨省吗
  • 结转工资费用
  • 企业预缴所得税怎么算
  • js中的截取字符串
  • 小微企业资金数额
  • Sublime Text 4 (Build 4143) 注册方法STEP BY STEP
  • 代理费与代理运费的区别
  • 天然气零售企业
  • 无实物的固定资产有哪些
  • 增值税在纳税申报表中怎么得出
  • 进项大于销项怎么结转增值税
  • 小规模个体户国税怎么算
  • 新合同旧合同的法律依据
  • python3 tcp
  • 货物运输行业前景如何
  • 运输服务的增值税税率到底是6还是9
  • 增值税不得抵扣的情形
  • 珠宝首饰可以开发票吗
  • mysql常用语
  • 利润表中利息费用包括手续费吗
  • 会计核算形式的设计具体内容包括
  • 购车费用怎么进行账务会计处理
  • 企业征收所得税会计分录
  • 跨年进项发票怎样账务处理
  • 采购商品未入库已经付款会计分录
  • 小规模纳税人销售货物税率是多少
  • 私车公用涉及的税种有哪些
  • 将购买的货物用于交际应酬可以抵扣进项税额吗
  • 资产减值损失可以计入营业外支出吗
  • 审计真实性认定
  • 公司的应付票据
  • sql server分组查询
  • mysql的基础知识
  • 深度Win7 64位系统默认输入法图标如何个性化设置
  • 电脑上的win8键盘怎么打开
  • winxp系统任务栏不见了
  • thinkpad如何安装win10
  • rhel-server
  • 简洁桌面怎么设置
  • 简单3招 让win10资源管理变得更方便简洁
  • win7蓝屏0x000000d1
  • 微软官方确认:Xbox不会出现在E3 2023实体展
  • 分形图形学
  • excel最小化后再次选择不弹出来
  • 电脑qq清理
  • 批处理替换文件
  • css怎么画图
  • shell脚本入门详解
  • qrcode怎么生成
  • 江苏省国家税务局总局官网
  • 东营为什么没有疫情
  • 七创社开放时间
  • 发票校验码不清楚
  • 发票真伪查询国税官网12366
  • 小组长的职责及职责
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设