首页 > 其他分享 >vue 项目中,后端返回文件流,导出excel

vue 项目中,后端返回文件流,导出excel

时间:2022-11-22 11:44:47浏览次数:42  
标签:vue URL excel 导出 window res data

  • 之前写过文件流导出excel,这次直接把上次的代码拿过来复制粘贴,但是导出的表格里面没有数据,只显示undefined。
  • 这是之前的代码
// api接口页面

// excel导出接口
export function exportList(query) {
    return request({
    url: '/api/xxx/xxx',                                                   
    method: 'get',
    params: query,
    responseType:'blob' // 重点代码
  })
}
// vue页面

 methods: {
 // 导出excel表格
  exportExcel() {
      exportList()
        .then(res => {
          let data = res.data; // 这里后端对文件流做了一层封装,将data指向res.data即可
          if (!data) {
            return;
          }
          let url = window.URL.createObjectURL(new Blob([data]));
          let a = document.createElement("a");
          a.style.display = "none";
          a.href = url;
          a.setAttribute("download", "excel.xls");
          document.body.appendChild(a);
          a.click(); //执行下载
          window.URL.revokeObjectURL(a.href); //释放url
          document.body.removeChild(a); //释放标签
        })
        .catch(error => {
          console.log(error);
        });
    }
}

  • 后来打印发现了问题
  • 上图是打印的结果,发现是blob的size不一样
  • 解决办法,里面添加'charset=utf-8'
  • 上代码
 // 导出excel表格
    exportExcel() {
      exportList()
        .then((res) => {
          var content = res;
          var data = new Blob([content],{type:"application/vnd.ms-excel;charset=utf-8"});  // 重点代码
          var downloadUrl = window.URL.createObjectURL(data);
          var a = document.createElement("a");
          a.href = downloadUrl;
          a.setAttribute("download", "excel.xls");
          a.click();
          window.URL.revokeObjectURL(data);
        })
        .catch((error) => {
          console.log(error);
        });
    },
  • 其实我还在 exportList()里面传了参数,为了能简单易懂,传参部分就删掉了-

标签:vue,URL,excel,导出,window,res,data
From: https://www.cnblogs.com/masternvshi/p/16914650.html

相关文章

  • VUE
    VUESoc:HTML+css+js:视图网络通信:axios页面跳转:vue-router状态管理:vuexVue-UI:ICE  M:模型V:视图C:控制器View:JSP{{}}DATA:mvvm:数据双向绑定 虚拟Dom:利......
  • swiper鼠标悬停(自由切换),拒绝大佬,珍爱生命![email protected]
    [email protected]@4.1.1--save-dev实测有效!JavaScript:<script>import{Swiper,SwiperSlide}from'vue-awesome......
  • NPOI Excel导入:时间格式2022/5/26导入变成26-5月-2022
    //NPOI导入日期格式处理stringmytime=dateStr.Trim();//dateStr为Excel导入的日期值IFormatProviderculture=newCultureInfo("zh-CN",true);......
  • vue2 计算属性9 watch immediate
    watch:监听数据发生的变化 newVal是变化后的新值,oldVal是变化前的旧值 一般都是带着接口查询的watch:{username(newVal){if(newVal==='')return$get('https:......
  • vue2-vm.$set,vm.$delete实现(三)
    vm.$set实现语法:vm.$set(target,key,value)参数:{Object|Array}target{String|Number}key{any}value返回值:{Function}unwatch用法:在object上设置一个属......
  • EsayExcel导出合并单元格(工具类)
    导出合并单元格工具类1.main方法调用publicstaticvoidmain(String[]args){List<GroupExport<ScoreDemo,String>>groupExports=newArrayList<>()......
  • vue学习笔记
     --vue笔记 --页面带参数跳转testBang(){this.$router.push({path:"/layout/channel/channelAuth",query:{startDate:"test",}})}--获取url入参lettok......
  • Firedac连接EXCEL数据表
    可以将EXCEL表当做数据库连接,方法是使用ODBC进行连接。见下列语句:ifnotdlgOpen1.ExecutethenExit;con1.Connected:=False;con1.Params.Clear;con1.DriverN......
  • avue框架 拼接后端返回的数据到table中
    根据要求展示下列详细地址情况: 后端返回的数据:  具体实现步骤:  {label:"详细地址",prop:"buildingName",display:false,width:130,......
  • vue3 封装axios
    1添加一个新的http.js文件封装axios 引入axios //引入Axiosimportaxiosfrom'axios'定义一个根地址//视你自己的接口地址而定varroot2='http://121.4.6......