zoukankan      html  css  js  c++  java
  • 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");
    }
    
  • 相关阅读:
    web-----------HTTP协议
    python基础作业------模拟实现一个ATM + 购物商城程序
    python--------进程与线程
    作业--用户输入数字0-100,判断成绩,用函数
    blog真正的首页
    blog首页视图
    让django完成翻译,迁移数据库模型
    创建Django博客的数据库模型
    创建blog APP
    在PyCharm上创建Django项目
  • 原文地址:https://www.cnblogs.com/wmt-kilig/p/13993623.html
Copyright © 2011-2022 走看看