美文网首页
文件导出/下载功能

文件导出/下载功能

作者: 赤焰妖狐 | 来源:发表于2020-09-01 17:10 被阅读0次

1,利用a标签的download属性,实现文件下载。

      download(){
        let that = this
        axios({
          url: 'xxx/yyy',
          data: {},
          method: 'POST',
          responseType: 'blob'   // 要求返回数据类型为blob类型
        }).then((res) =>{
          let data = res.data
          let reader = new FileReader()
          reader.onload = function(){
            try{
              // 如果能被解析,说明是json格式的报错,转化成json格式,报错给用户
              let jsonObj = JSON.parse(this.result)
              alert(jsonObj.msg)       // 弹出报错信息
            }catch(e){
              // 说明是可下载的文件流,执行下载动作
              that.callBackDownload(res)
            }
          }
          reader.readAsText(data)
        })
      },

      callBackDownload(res){
        let type = res.headers['content-type'].split(';')[0]
        let fileName = res.headers['content-disponsition'].split('filename=')[1]
        // let fileData = new Blob([res.data], {type: 'application/vnd.ms-excel;charset=utf-8'})
        let fileData = new Blob([res.data], {type: type})
        // msSaveOrOpenBlob 兼容IE10   a.click()在IE10会出现拒绝访问的情况,为了兼容IE需使用
        if(window.navigator.msSaveOrOpenBlob){                
          window.navigator.msSaveOrOpenBlob(fileData, fileName)
        }else{     // 利用a标签完成下载
          let a = document.createElement('a')
          let url = window.URL.createObjectURL(fileData)
          a.style = 'display: none'
          a.download = decodeURI(fileName)
          a.href = url
          a.click()
          a.remove()
          window.URL.revokeObjectURL(url)
        }
      }

设置responseTyle为 blob后,会存在两个问题:
1.如果此时开启了前端mock,responseType将会失效,原因是在请求发送之前mock会默认修改请求头
2.如果借口报错,那么返回的json报错信息将会自动转换成blob类型,从而导致无法获取报错信息。解决方法在代码中已给出。
具体表现可参考: https://www.cnblogs.com/qilj/p/11950517.html
3.代码中只提供了excel的导出,其他格式的文件只需要修改对应的mime type即可
各种文件mime type表可参考 https://www.w3school.com.cn/media/media_mimeref.asp

2 前端拼接下载地址,参数拼接在URL后直接访问

window.open('xxxx/yyyy?name=mmm&number=nnn')
这种方法干脆利索,缺点就是拼接在URL后边安全性不高,也不能拼接很多参数。不过大多数情况下,完全够用了。

相关文章

  • python 导入导出文件

    1、最简单的文件下载功能 2、更合理的文件下载功能 3、文件下载功能再次优化 4、直接导出Excel表格 5、导出...

  • 文件导出/下载功能

    1,利用a标签的download属性,实现文件下载。 设置responseTyle为 blob后,会存在两个问题:...

  • 简单EXCEL列表导出

    本例子,简单介绍excel导出功能,基于HttpServletResponse,网络文件下载。依赖jar 工具类: 用法

  • vue下载文件导入导出

    下载文件 导出文件 导入文件

  • Vue+axios实现下载文件流功能

    功能描述 点击“导出数据”按钮,向后台发送axios请求,实现下载Excel文件的功能。 实现步骤 确认后端返回的...

  • 流文件导出直接下载

    文件的异步导出,此处是采用post的方法导出excel 调用接口获取流文件之后获取数据,进行下载处理 文件下载ok

  • 第二章 导入导出和path的模块系统

    1.导入导出功能 例,如有两个js文件,文件1要用文件2的数据,那么我们就需要导入导出的功能来实现 1.1导出 m...

  • js导出table数据

    导出数据,在后台功能中是一个比较重要的功能,一般情况由后端程序导出数据并生成文件供前端下载,后台生成有个好处是,不...

  • xlsx.js excel文件下载

    excel 文件的下载 前端 后端导出 excel

  • js下载(导出)功能

    第二种方法

网友评论

      本文标题:文件导出/下载功能

      本文链接:https://www.haomeiwen.com/subject/jrjvsktx.html