zoukankan      html  css  js  c++  java
  • vue项目中实现文件下载功能


    /*
    * * 下载文件调用 * @param 接口返回数据 文件名 */
    export function downloadFile(res, fileName) {
      if (!res) {
        return
      }
      if (window.navigator.msSaveBlob) {  // IE以及IE内核的浏览器
        try {
          window.navigator.msSaveBlob(res, fileName)  // res为接口返回数据,这里请求的时候已经处理了,如果没处理需要在此之前自行处理var data = new Blob([res.data]) 注意这里需要是数组形式的,fileName就是下载之后的文件名
          // window.navigator.msSaveOrOpenBlob(res, fileName);  //此方法类似上面的方法,区别可自行百度
        } catch (e) {
          console.log(e)
        }
      } else {
        let url = window.URL.createObjectURL(new Blob([res]))
        let link = document.createElement('a')
        link.style.display = 'none'
        link.href = url
        link.setAttribute('download', fileName)// 文件名
        document.body.appendChild(link)
        link.click()
        document.body.removeChild(link) // 下载完成移除元素
        window.URL.revokeObjectURL(url) // 释放掉blob对象
      }
    }
     

     页面调用  调用时传入后端返回的res和文件名

    下载文件的具体步骤(以谷歌浏览器为例)

    • 点击下载按钮,请求后台接口,获取后台传输过来的数据data
    • axios中有个方法可以把文件流对象转blob
    • 根据window.URL.createObjectURL方法生成一个链接
    • 创建一个a标签元素
    • 设置属性,a.download = '你的文件名字',a.href = '刚刚生成的URL'
    • 使这个标签触发点击事件
    • 移除元素
  • 相关阅读:
    2017 五一 清北学堂 Day1模拟考试结题报告
    2973 枪毙
    2840 WIKIOI——评测
    解决magento保存产品时耗时很长的问题
    easyui-layout中的收缩层无法显示标题问题解决
    JAVA排序(一) Comparable接口
    C语言数据结构----栈与递归
    [置顶] SpecDD(混合的敏捷方法模型)主要过程概述
    Vim 实用技术,第 1 部分: 实用技巧(转)
    如何解决dns解析故障
  • 原文地址:https://www.cnblogs.com/Hhuizi/p/11511932.html
Copyright © 2011-2022 走看看