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

  • 总分公司企业所得税合并申报
  • 税务局防范税收风险的措施
  • 应纳税额等于已缴税额
  • 支付税金怎么算
  • 总分公司报税有哪些注意事项
  • 自来水厂会污染水源吗
  • 账账核对的基本内容
  • 拿工资要开发票,发票去哪儿开?
  • 资产处置收益是什么会计科目
  • 通讯费没有公司抬头怎么报销
  • 土地租赁增值税发票税是多少
  • 银行打出的明细清单怎么看不懂
  • 国有企业改制资产评估增值税收规
  • 外资企业对应的企业是什么
  • 总分类一般采用什么格式
  • 资产负债表长期借款包括哪些
  • 超额库存现金
  • 购买的商品赠送如何做账
  • 被开除了怎么办理手续
  • 代理报关业务
  • 火车票飞机票计入什么费用
  • 酒店小规模纳税人税率
  • 管理费用怎么记忆
  • 多计提的社保费,可否计入营业外收入
  • 自行研发专利权发生的费用全部费用化了
  • 留存收益转增股本,另一方公司怎么做账
  • 小规模纳税人附加税减半征收政策2023
  • 电脑系统还原步骤
  • 主营业务成本的二级科目有哪些
  • 房屋扩建折旧年限怎么算
  • 融资租赁吗
  • androirc下载
  • 押金要不回来怎么办
  • 行政单位预付款已收到货物无发票
  • 租赁固定资产成本怎么算
  • 增值税一般纳税人资格登记表
  • psd格式文档
  • 个人买车缴纳车船税吗
  • 资产减值损失和存货跌价准备有什么区别
  • 开关电源pcb布线规则
  • vue2路由跳转页面不刷新问题
  • 审计招标费包含哪些内容
  • 印花税申报完成如何缴纳
  • 研发支出可以全是管理费用
  • phpcms生成html
  • 给客户的回扣如何做账
  • 民办学校学费收现金
  • 经营活动现金净流量为正说明什么
  • 进口关税完税价格的计算公式
  • 发票有种类型
  • ibm db2认证
  • 党费会计核算科目有哪些
  • 中级会计实务主观题怎么给分
  • 材料已入库后收回怎么办
  • 先收款后给发票
  • 在建工程工伤保险延期费用计算
  • 支付临时工人的报酬属于工资薪金概算吗
  • 车船使用税应该怎么交
  • 其他应付款转应付账款分录
  • 百旺开发票清单
  • 款已付未收到发票
  • 其他债权投资有没有减值准备
  • 开票加的税点走什么费用
  • 进项税额抵扣是按税率分开抵扣吗
  • 税务局退款会计分录
  • 企业办理土地证需要哪些资料
  • 手工现金日记账范本
  • win8怎么扩展c盘
  • win7桌面和win10桌面
  • linux系统讲解
  • win8系统打开软件闪退
  • macbook 苹果系统
  • win10一年更新一次
  • windows 10 mobile--移动版
  • win8磁盘占用率100%如何解决
  • 安卓手机照片压缩
  • 孙其功陪你学之——unity3d进程暂停
  • 党建阵地作用发挥不好
  • 北京国家税务局待遇
  • 职工周转房需要缴纳房产税吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设