vue axios实现下载(兼容ie并实现取后台返回文件名)实例:easypoi导出excel vue axios接收

完美解决axios在ie下的兼容性问题 下面小编就为大家分享一篇完美解决axios在ie下的兼容性问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 立即下载

vue代码:

axios({
    method: 'post',
    url: '/proxyErmsApi/excel/' + url,
    data: data,
    responseType: 'blob',
    headers: {
      'Authorization': Authorization
    }
  }).then(response => {
    // 兼容ie
    if (window.navigator.msSaveBlob) {
      try {
        const blobObject = new Blob([response.data])
        //设置文件名称为后台返回名称
        window.navigator.msSaveBlob(blobObject, response.headers['filename']);
      } catch (e) {
        console.log(e)
      }
    } else {
      // 其他浏览器
      // eslint-disable-next-line no-undef
      const blob = new Blob([response.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8' }) // application/vnd.openxmlformats-officedocument.spreadsheetml.sheet这里表示xlsx类型
      const downloadElement = document.createElement('a')
      const href = window.URL.createObjectURL(blob) // 创建下载的链接
      downloadElement.href = href
      //设置文件名称为后台返回名称,也可以自定义
      downloadElement.download = response.headers['filename']
      document.body.appendChild(downloadElement)
      downloadElement.click() // 点击下载
      document.body.removeChild(downloadElement) // 下载完成移除元素
      window.URL.revokeObjectURL(href) // 释放掉blob对象
      return response.data
    }
  }
  )

java 后台返回头设置示例:

        response.reset();
        response.setContentType("multipart/form-data");
        response.setCharacterEncoding("utf-8");
        response.setHeader("Content-disposition", "attachment;filename="+fileName + ".xlsx");
        response.setHeader("FileName", fileName + ".xls");
        response.setHeader("Access-Control-Expose-Headers", "FileName");

 

 

完整代码:

vue完整方法:

// 下载鉴定单接口
export function downloadCertificate(list, identifyType, Authorization, type, ermsIdenMainId) {
  const data = new FormData()
  // 0是处置列表下载 1 详情页下载
  const url = type === 0 ? 'downloadCertificateByMainId' : 'downloadCertificate'
  data.append('list', JSON.stringify(list))
  data.append('identifyType', identifyType)
  data.append('ermsIdenMainId', ermsIdenMainId)
  // const data = JSON.stringify(list)
  // window.location.href = process.env.VUE_APP_ERMS_API + '/excel/downloadCertificate?list=' + encodeURI(JSON.stringify(list)) + '&identifyType=' + identifyType + '&Authorization=' + Authorization
  console.log('list', list)
  axios({
    method: 'post',
    url: '/proxyErmsApi/excel/' + url,
    data: data,
    responseType: 'blob',
    headers: {
      'Authorization': Authorization
    }
  }).then(response => {
    console.log('IDENTIFY_TYPE', global.IDENTIFY_TYPE.get(identifyType + ''))
    if (window.navigator.msSaveBlob) {
      try {
        const blobObject = new Blob([response.data])
        window.navigator.msSaveBlob(blobObject, global.IDENTIFY_TYPE.get(identifyType + '') + response.headers['filename']);
      } catch (e) {
        console.log(e)
      }
    } else {
      // 其他浏览器
      // eslint-disable-next-line no-undef
      const blob = new Blob([response.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8' }) // application/vnd.openxmlformats-officedocument.spreadsheetml.sheet这里表示xlsx类型
      const downloadElement = document.createElement('a')
      const href = window.URL.createObjectURL(blob) // 创建下载的链接
      downloadElement.href = href
      downloadElement.download = global.IDENTIFY_TYPE.get(identifyType + '') + response.headers['filename'] // 下载后文件名
      document.body.appendChild(downloadElement)
      downloadElement.click() // 点击下载
      document.body.removeChild(downloadElement) // 下载完成移除元素
      window.URL.revokeObjectURL(href) // 释放掉blob对象
      return response.data
    }
  }
  )
}

java代码完整方法示例:easypoi利用模板导出

 /**
     *  通过前段数据直接下载鉴定单
     *  ermsIdenMainId :鉴定记录ID
     *  identifyType:鉴定类型:1、保密期限鉴定;2、保管期限鉴定、3遗失鉴定、4销毁鉴定
     */
    public void downloadCertificateByData(HttpServletResponse response, List<ErmsIdenDetailExpParam> list, String identifyType) {
        try {
            if (ObjectUtils.isEmpty(list) || ObjectUtils.isEmpty(identifyType)) return ;
            //查询数据
            Map<String,Object> data = new HashMap<>();
            data.put("list",list);
            String tempPath="";
            switch (identifyType){
                case "1":
                    tempPath = "templates/certificateOfSecretPeriod.xls";
                    break;
                case "2":
                    tempPath = "templates/certificateOfSavePeriod.xls";
                    break;
                case "3":
                    tempPath = "templates/certificateOfLosePeriod.xls";
                    break;
                case "4":
                    tempPath = "templates/certificateOfDestroyPeriod.xls";
                    break;
            }
            TemplateExportParams params = new TemplateExportParams(tempPath);
            Workbook workbook = ExcelExportUtil.exportExcel(params, data);
            //返回头设置下载,并设置文件名,返回
            setDowlowdResponse(response, workbook,"");

        } catch (Exception e) {
            log.error(e.getMessage(), e);
//            return Response.fail("系统错误!");
        }
//        return Response.success();

    }

 

 /**
     * 设置下载(axios接收版)
     * @param response
     * @param workbook
     * @param fileName
     * @throws IOException
     */
    public void setDowlowdResponse(HttpServletResponse response, Workbook workbook, String fileName) throws IOException {
        fileName +=new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
        response.reset();
        response.setContentType("multipart/form-data");
        response.setCharacterEncoding("utf-8");
        response.setHeader("Content-disposition", "attachment;filename="+fileName + ".xlsx");
        response.setHeader("FileName", fileName + ".xls");
        response.setHeader("Access-Control-Expose-Headers", "FileName");
        ServletOutputStream outStream = null;
        try {
            outStream = response.getOutputStream();
            workbook.write(outStream);
        } finally {
            outStream.close();
        }
    }

 

PCL 三维重建 泊松曲面重建算法 本文介绍了基于泊松曲面重建算法的三维重建过程。泊松重建是一种利用点云数据生成三维表面的算法,它基于点云的法线估计和泊松方程的求解,能够生成光滑且连续的曲面模型。该方法适用于复杂形状和细节的表面重建。 阅读详情

相关推荐

支付漏洞防护绕过的一种方式

放完包后就到了提交订单的地方,可以发现,金额确实小了很多,合理的搭配的话还可以更低,再次前进可以发现,金额确实是这么多,后面就不支付了,到此就结束了。也就是说数量可以为负数,但是金额不能为0或者0以下,有什么方法可以绕过这个限制吗,其实并不难,既然可以为负数,只是对金额不能为0或者负数做了限制。我们可以尝试拼接法,利用负数加上正数让他的值变得很低,但是又大于0就可以了,这里利用购物车的结算方法,随机加一些在购物车里。这里为了方便查看数据包,我这边商品的数量选择3,点击立即购买并抓包。

2301_80115097的博客 1529

关于使用springboot+easypoi+vue下载excel一直报跨域问题

关于使用springboot+easypoi+vue下载excel一直报跨域问题的解决方案

menghuannvxia的专栏 524

机器学习参数寻优:方法、实例与分析

机器学习模型的性能很大程度上依赖于其参数的选择。参数寻优(Hyperparameter Tuning)是提升模型表现的关键步骤之一。本文将详细介绍主流的参数寻优方法,包括网格搜索(Grid Search)、随机搜索(Random Search)、贝叶斯优化(Bayesian Optimization)、和超参数优化库(如Optuna和Hyperopt)等,并探讨它们的优缺点及适用场景。

甜盐的博客 2841

Ajax下载Excel文件

最近在做项目的过程中,遇到需要使用Ajax下载Excel文件的需求,以往都是通过使用form表单提交的方式来下载文件。通过一番研究,其主要实现代码如下: 1、后台接口返回二进制流 // 生成excel文件 @RequestMapping(value = "/study", method = RequestMethod.POST) public void study(@RequestBod...

程序猿开发日志【学习永无止境】 9113

LabVIEW波形图表时间轴设置:三种方法实现横坐标显示日期时间

在数据采集与设备监控场景中,波形图表的横坐标默认显示采样点序号而非日期时间,这给工程师分析历史数据带来不便。理解时间标识(Timestamp)的本质——一个自1904年起算的双精度秒数,是解决问题的关键。时间轴设置既是显示格式问题,更是数据层与显示层的协同设计。通过属性节点动态生成刻度标签、将时间标识数组直接作为X轴数据、或使用波形数据(Waveform)类型绑定t0与dt,分别适用于固定点数显示、非等间隔事件记录和等间隔连续采样等不同需求。合理选择方案并注意缓冲区预分配与时间连续性处理,可让波形图表准确呈

weixin_33416697的博客 254

Android 13.0 开机启动优化之PMS扫描apk耗时相关功能优化

在android13.0的系统rom定制化开发中,在系统中开发产品时,会根据客户要求内置第三方app,这时如果内置app过多,或者安装的app过多,在系统开机的过程中 在pms扫描安装app的时候,就会比较耗时,这时候就需要优化下pms扫描安装app这块的功能代码,用多线程来实现pms扫描安装app,来加快开机时间,接下来 来实现这个功能

安卓兼职framework和app工程师的博客 1333

Excel导出:使用excel模板导出excel表格下载

使用excel模板导出excel的好处在于可以事先在模板上定义颜色、格式等,适用于模板设计得比较灵活复杂的场景

GuaGea的博客 2048

YOLOv8与UNetV2融合:一种面向目标检测与图像分割的混合方法【附核心代码】

我们提出了一种基于YOLOv8和UNetV2相结合的混合架构。该架构利用YOLOv8作为主干进行目标检测,同时在YOLOv8的特征提取过程中,引入UNetV2来进行图像分割任务的增强。在该架构中,YOLOv8负责大范围目标检测和位置预测,而UNetV2则在检测网络的特征图基础上,通过其高效的上下文信息提取和细节恢复能力,进一步优化分割任务。在本文中,我们提出了一种改进YOLOv8的方法,通过引入图像分割网络UNetV2来提高图像分割检测性能。

一键难忘的博客 3525

easypoi之post请求导出excel(解决ajax发送请求乱码无法导出excel文件问题)

坑1:ajax发送请求乱码无法导出excel文件,因为文件是二进制格式,ajax最终会将返回的数据解析成json,所以导致乱码。 坑2:通过form表单发送post请求,后端接口不要用 @RequestParam 和 @RequestBody 修饰 原因:form传参的格式是username=xxx,pwd=xxx这样的格式, ajax是将对象转成字符串进行传参,格式为username : xxx,pwd : xxx 因此,如果想post请求方式导出excel,则必须用form提交请求,且后端接..

Seven71111的博客 4535

INFFUS 2025 | DDBFusion:基于双重分解和贝塞尔曲线的统一图像分解与融合框架

现有的图像融合算法大多集中于网络架构和损失函数的设计,采用统一的特征提取策略,却忽略了冗余信息和有效信息的划分。然而,对于互补信息而言,统一的特征提取器可能并不适用。因此,本文提出了一种基于贝塞尔曲线图像增强和分层分解的统一图像融合算法,并构建了一个自监督学习任务来学习有意义的信息。其中,贝塞尔曲线旨在模拟不同的图像特征,并构建特殊的自监督学习样本,因此作者的方法不需要特定任务的数据,并且可以在公共自然图像数据集上轻松进行训练。同时,作者的双重分解自监督训练方法可以为模型赋予冗余信息过滤能力。

小白学视觉 308

5.6华为OD机试真题 新系统 - 匹配命令行前缀关键字 (Java/Py/C/C++/Js/Go)

5.6华为OD机试真题 新系统 - 匹配命令行前缀关键字本文整理华为 OD 机试新系统机考真题库,涵盖高频考点精析与完整题目内容,提供 C 语言、Java、C++、Python、Go、JavaScript 多语言源码实现,搭配详细解题思路讲解,并支持在线 OJ 刷题练习,助力高效备考华为 OD 机试新系统。

算法大师! 2128

easypoi实现导出数据、下载导入模板、导入数据

easypoi实现导入数据导出数据,下载导入模板

五宝茶四娃的博客 3772

RN8209C单相电量计量芯片调试记录

芯片数据手册-简化版 调试功能是读取直流电池电压,出于这个需求,也就是要读取芯片的3路AD值,因为有效值是针对交流的,这点可以查看手册。 前提知道: 通信: 本次调试采用uart通信,rn8209c只有uart接口,采用9位数据(8位数据+偶校验),读寄存器只需要发送对应寄存器值就行,,波特率是4800,写的话需要保证最高为是1。没仔细读手册,这里吃了很大的亏。 复位: RN8209C支持两只复位方式,一种是发送复位命令复位,另一种是拉低复位引脚25ms以上,复位引脚复用它的串口接收(RX)口,所以拉低ST

wang 恒 的博客 6581

SpringBoot+easypoi实现excel的导入导出

关于数据库中数据以excel表格进行导入和导出的需求是十分常见的,本篇博客是使用easypoi来实现的。借助的是之前有关springboot+mybatis-plus搭建的一个小项目。 1.准备阶段。 准备好数据库,可以建一张简单的基础的用户信息表原来测试。 新建springboot项目,并且可以使用mybatis-plus快速生成对应的代码,这里有关其使用可以看我的这篇博客:SpringBoot+Mybati-Plus实现代码快速搭建 除了之前项目中已经有的依赖,还需要导入easypoi的依赖,这里.

qq_43265564的博客 874

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

vue项目导出excel实现

1、springboot后端 注:后端导出excel使用的是easypoi插件实现 1、实体类 package com.springbootapi.entity; import cn.afterturn.easypoi.excel.annotation.Excel; public class EasyPoiExport { @Excel(name = "名字", width = 30...

qq_36716000的博客 431

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Vue+Element ui+ Springboot实现Excel模板下载实现------Vue+Element 常用功能汇总之系列之一

情景:Vue+Element ui+ Springboot项目中前端用到Excel模板下载功能,在网上找了不少案例,多数不尽人意,不是失败就是下载后数据乱码,解决后在此记录一下。 前后端代码如下: 前端代码: 1.按钮 <el-button size="mini" type="success" icon="el-icon-download" @click="subPrint"&g...

L-seeker-Q的博客 3679

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【导出功能】使用easypoi笔记

前端 vue 触发导出注意: 请求时: responseType: ‘blob’ 响应时:需要模拟a标签点击下载 示例 /** * 导出excel */ exportExcel(page) { this.dataListLoading = true this.$http({ url: this.$http.adornUrl('/xxx/request-url'), method: 'GET',

别皱眉 344

Vue+springboot实现excel导出和zip导出

后端采用Easypoi技术,相关pom依赖请自行查阅官方文档,excel采用excel模板导出。

weixin_48909429的博客 723

vue前端接受后台返回流数据,并实现文件正常下载

前端导出下载方法 // 导出 exporttable () { const apiUrl = "http://localhost:9999/export/telDetails"; //console.log(this.form) let param = new URLSearchParams(); param.append('startTime', this.addForm.startTime); param.ap

weixin_45684556的博客 9313

在VUE项目使用ajax下载excel表的做法

以往我们都是使用一个标签直接打开URL地址进行下载,但是在某个VUE项目中我遇到后端PHP要求使用GET请求进行下载的excel表,由于是第一次遇到这样的需求,有点不知所措。所以就立马百度一下,哈哈,网上还有不少大神遇到过这样的需求,还真被我找到了。但是每个项目都有自己不同的需求,我们可以参考别人的然后进行相应修改,以下是我在项目中写法: //这个是请求接口数据 export const e...

如影随风 5872

前端通过new Blob下载文档流(下载zip或excel)

前端通过new Blob来下载后端返回的文档流

qq_33548028的博客 3415

axios POST方式下载文件乱码解决以及浏览器兼容

get方式获取 获取到data后,直接置于a标签的hreft属性中即可 POST方式 先设置responseType为blob,对象随后对返回的数据进行Blob处理,再创建a标签模拟点击下载。 值得注意的是,如果你的项目中使用了mock数据,那么会覆盖你的responseType的设置,因此,你需要密切关注返回的数据是个Blob对象还是Json格式 具体代码如下 axios({ ...

南乡人的博客 2061

VUE+SpringBoot+EasyPoi实现浏览器点击下载word模板数据生成

VUE+SpringBoot+EasyPoi 导出word模板数据

天弃的博客 2138

axios在IE下的兼容性处理

axios在IE下的兼容性处理

王也的博客 1153

Vue之Axios下载Java后台返回文件中获取文件名的问题

之前在获取后台返回的文件流然后在前台转化为Blob的时候文件名都是写死的不是后台设置在response中的。 在responseHeader中明明有我设置的参数缺获取不出来console.log(response.headers[‘filename’]

cavan的博客 1万+

Axios兼容 IE浏览器

在ie浏览器下,我们会发现axios获取请求数据失败,会报错:vuex requires a Promise polyfill in this browser axios说是支持ie8+,不过其原理是基于promise之上实现的,所以会有不兼容ie的问题 解决方法: 1、安装 babel-polyfill 2、修改build配置环境为下图或者 直接import 然后 npm run dev 重启...

xjf106的博客 1982
上一篇: mybatis/mybatis-plus一对多查询
下一篇: linux Centos7 安裝搭建elasticsearch7.6.2+kibana7.6.2+中文分词7.6.2详解
grootblockchain
博客等级 码龄11年 55粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值