• vue项目中: ①后端返回文件流,axios发送post请求下载文件 ②get(大致思路 没有测试代码)


    1、get
    ①、a链接的href属性
    ②、window.location.href=url/location.href=url

    2、post
    axios拦截处理

    service.interceptors.response.use((response) => {
        return response     //不返回response.data 是为了后面拿到response.headers
     }, 
     error => {
        return Promise.reject(error)
     }
    )
    

    接口设置: responseType: 'blob'很重要

    export function creatCertFile (params) {
       return axios.post(url, params, { responseType: 'blob' })
    }
    

    请求处理

    creatCertFile(params).then(res => {
          let blob = res
          let reader = new FileReader()
          reader.readAsDataURL(blob)  // 转换为base64,可以直接放入a标签href
          reader.onload = (e) => {
              try {
                // 说明是普通对象数据,后台转换失败
                 let msg = JSON.parse(reader.result)
                 this.$message.info(msg)
               } catch {
                // 解析成对象失败,说明是正常的文件流
                     if(typeof window.navigator.msSaveBlob !== 'undefined'){
                      //兼容ie
                      window.navigator.msSaveBlob(blob, filename)
                      } else {
                          //转换完成 创建一个a标签用于下载
                          let a = document.createElement('a')
                          a.document = filename
                          a.href = e.target.result
                          document.body.appendChild(a)  //修复firefox中无法触发click
                          a.click()
                          document.body.removeChild(a)
                       }   
               }
          }
    })
    

    文件名:filename -> 用res.headers获取
    后台需设置Access-Control-Expose-Headers: Content-Disposition因为axios默认取不到content-disposition属性

    let contentDisposition = res.headers['content-disposition'];
    if (contentDisposition) {
         filename = window.decodeURI(res.headers['content-disposition'].split('=')[1], "UTF-8");
    }
    
  • 相关阅读:
    LeetCode278. 第一个错误的版本
    LeetCode275. H 指数 II
    LeetCode274. H 指数
    LeetCode273. 整数转换英文表示
    LeetCode268. 缺失数字
    LeetCode264. 丑数 II
    LeetCode263. 丑数
    关于解决Chrome新版本中cookie跨域携带和samesite的问题处理
    java将list转为树形结构的方法
    Python pycharm selenium hyrobot 学习中遇到的问题汇总2
  • 原文地址:https://www.cnblogs.com/wmt-kilig/p/13993623.html
Copyright © 2020-2023  润新知