当前位置: 首页 > article >正文

vue中下载文件后无法打开的坑

今天在项目开发的时候临时要添加个导出功能我就写了一份请求加导出得代码,

代码:

    //导出按钮放开
    exportDutySummarizing (dataRangeInfo) {
      const params = {
        departmentName: dataRangeInfo.name,
        departmentQode: dataRangeInfo.qode
      }
        //拼接所需得url
      const baseUrl = Constants.SERVICES.duty + Constants.DUTY_SUMMARIZING_EXPORT
      this.$axios({
        method: 'POST',
        url: utils.strFormat(baseUrl, {
          departmentName: params.departmentName,
          departmentQode: params.departmentQode
        }),
        headers: {
          Authorization: 'bearer ' + Cookies.get('Access-Token'),//token
          'Content-Type': 'application/json'
        },
        responseType: 'blob',//类型 这个必须要
        data: {//参数
          a: '1'
        }
      })
        .then((response) => {
            //公共的下载方法 在下面展示
          utils.download(response, dataRangeInfo.name + '名字.xlsx')
        })
        .catch(() => { })
    }
    //公共的下载方法
    util.download = function (data, filename) {
      if (!data && !filename) {
        return
      }
      let url = window.URL.createObjectURL(new Blob([data]))
      let link = document.createElement('a')
      link.style.display = 'none'
      link.href = url
      link.setAttribute('download', filename)
      document.body.appendChild(link)
      link.click()
    }

 到这里请求文件流和导出文件得方法都已经写完了,这里面有的坑呢 打开就是返回得数据,大概就是你new Blob([data])得时候这个data是否是文件流,这个例子后端直接给我返回了文件流所以就直接使用了 一边都是res.data这样使用,再有就是responseType: 'blob',这个在请求文件流时请求头中必须要写,其他就没什么了。

如果到这里下载下来的文件还是无法打开请往下看

下面就要说的就是mockjs了

mockjs 会拦截axios, 初始化的时候给拦截响应设置了 responseType: ' ',

所以只需要把 mockjs注释掉或者在.env把VUE_APP_BUILD_MODE设置成nomock中就可以了.

改完记得重启项目!


http://www.kler.cn/news/149826.html

相关文章:

  • Linux 下命令行启动与关闭WebLogic的相关服务
  • PPP/INS紧组合代码学习
  • uniapp设置手机通知权限以及uniapp-push2.0推送
  • 【迅搜04】索引配置(一)加载配置文件以及服务端配置
  • SpringBoot : ch09 整合Redis
  • 解析javascript数组方法 find 和 filter 有何区别
  • Android 11.0 默认开启USB调试功能
  • 【C++】内存管理(new与delete)
  • android开发:安卓13Wifi和热点查看与设置功能
  • 【Java Spring】SpringBoot 五大类注解
  • 使用elasticsearch-head插件修改elasticsearch数据
  • [UGUI]Unity背包系统制作详细步骤
  • 【古月居《ros入门21讲》学习笔记】15_ROS中的坐标系管理系统
  • 王者农药小游戏
  • MySQL 索引类型
  • html实现计算器源码
  • linux 账号管理实例一,stdin,passwd复习
  • 力扣105. 从前序与中序遍历序列构造二叉树
  • 虹科方案 | 如何破解CAN与车载以太网之间数据传输和协议转换的难题?
  • 树与二叉树堆:链式二叉树的实现
  • 手机 IOS 软件 IPA 签名下载安装详情图文教程
  • 第七节HarmonyOS UIAbility生命周期以及启动模式
  • 基于SpringBoot的图书管理系统
  • <Linux>(极简关键、省时省力)《Linux操作系统原理分析之Linux 进程管理 7》(11)
  • AI算法中的模型量化岗是做什么的
  • 制作心理咨询小程序的详细指南
  • 开发定制化抖音票务小程序的技术解析
  • 技术分享| anyRTC之RTN网络
  • 解决苹果手机iphone手机强制重启
  • 6-4 jmu-python-发牌