前端vue中文件下载的几种方式

前端vue中文件下载的几种方式第一种方式是前端创建超链接,通过a标签的链接向后端服务发get请求,接收后端的文件流,非常简单:<a:href='”/user/downloadExcel”‘>下载模板</a>另一种情况是创建div标签,动态创建a标签:<divname=”downloadfile””downloadExcel()”>下载</div>function…

大家好,又见面了,我是你们的朋友全栈君。

第一种方式是前端创建超链接,通过a标签的链接向后端服务发get请求,接收后端的文件流,非常简单:

<a :href='"/user/downloadExcel"' >下载模板</a>

另一种情况是创建div标签,动态创建a标签:
<div name="downloadfile" onclick="downloadExcel()">下载</div>
function downloadExcel() {
    let a = document.createElement('a')
    a.href ="/user/downloadExcel"
    a.click();
} 
还有一种补充:
 function downloadExcel() {
    window.location.href = "/tUserHyRights/downloadUsersUrl";
} 

第二种方式通过创建iframe的方式:

<el-button  size="mini" class="filter-item" type="primary" icon="el-icon-download" @click="handleExport(scope.row)">导出</el-button>
//method方法:
handleExport(row) {
      var elemIF = document.createElement('iframe')
      elemIF.src = 'user/downloadExcel?snapshotTime=' + formatDate(new Date(row.snapshotTime), 'yyyy-MM-dd hh:mm') +
                    '&category=' + row.category 
      elemIF.style.display = 'none'
      document.body.appendChild(elemIF)
    }

第三种方式,会对后端发的post请求,使用blob格式

<el-button  size="mini" class="filter-item" type="primary" icon="el-icon-download" @click="handleExport(scope.row)">导出</el-button>
//method方法
handleExport(row){
const url="/user/downloadExcel"
const options = {snapshotTime:formatDate(new Date(row.snapshotTime), 'yyyy-MM-dd hh:mm')}
exportExcel(url,options)
}
/**
 * 封装导出Excal文件请求
 * @param url
 * @param data
 * @returns {Promise}
 */
//api.js
export function exportExcel(url, options = {}) {
  return new Promise((resolve, reject) => {
    console.log(`${url} 请求数据,参数=>`, JSON.stringify(options))
    axios.defaults.headers['content-type'] = 'application/json;charset=UTF-8'
    axios({
      method: 'post',
      url: url, // 请求地址
      data: options, // 参数
      responseType: 'blob' // 表明返回服务器返回的数据类型
    }).then(
      response => {
        resolve(response.data)
        let blob = new Blob([response.data], {
          type: 'application/vnd.ms-excel'
        })
        console.log(blob)
        let fileName = Date.parse(new Date()) + '.xlsx'
        if (window.navigator.msSaveOrOpenBlob) {
          // console.log(2)
          navigator.msSaveBlob(blob, fileName)
        } else {
          // console.log(3)
          var link = document.createElement('a')
          link.href = window.URL.createObjectURL(blob)
          link.download = fileName
          link.click()
          //释放内存
          window.URL.revokeObjectURL(link.href)
        }
      },
      err => {
        reject(err)
      }
    )
  })
}

如果后端提供的下载接口是get类型,可以直接使用方法一和二,简单又便捷;当然如果想使用方法三也是可以的,不过感觉有点舍近求远了。
如果后端提供的下载接口是post类型,就必须要用方法三了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154177.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 推荐10个堪称神器的学习网站

    推荐10个堪称神器的学习网站每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。”今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得4点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈)既然4点多起来,就得好好利用起来。于是我就挑选了10个堪称神器的学习网站,推…

    2022年6月9日
    49
  • IDEA SpringBoot整合Mybatis实现增删改查操作

    IDEA SpringBoot整合Mybatis实现增删改查操作1.新建一个project新建项目时选择SpringInitializer。2.创建项目文件结构、选择jdk版本一般选择Javaversion83.选择项目需要的依赖首先点击web选择springweb,再点击SQL选择MySQLdriver等,然后再一路next到新建完成。4.查看项目新建完成后的pom文件<?xmlversion=”1…

    2022年6月24日
    45
  • 学生用vs哪个版本_vs2008激活成功教程版

    学生用vs哪个版本_vs2008激活成功教程版以下内容都是转来的,等有时间我会自己整合一下(来源)最近家里的机器重装系统,又得装吃饭的家伙——VS2005了。自从上半年MS出了VS2005的SP1之后,装了几次SP1都觉得挺噩梦的,太长时间了。所以这次参考了网上的一些内容,制作了VS2005的SP1集成版,Professional和TeamSuite各一份。主要还是5步吧,参考了网上的很多资料1把VS…

    2022年9月1日
    5
  • 详细了解 clientWidth、clientHeight、clientLeft、clientTop 以及几个常用的场景

    详细了解 clientWidth、clientHeight、clientLeft、clientTop 以及几个常用的场景clientLeft、clientHeight、clientWidth、clientHeightclientWidth、clientHeight元素内部宽度和高度,clientLeft、clientTop获取元素内边距边框到边框的距离.大概如下图所示:clientWidth属性表示元素的内部宽度,以像素计。该属性包括内边距,但不包括垂直滚动条(如果有)、边框和外边距。如上图所示,计算方式为,分为如下两种:存在垂直滚动条 contentwidth+paddin…

    2022年7月22日
    15
  • Linux dstat 监控工具[通俗易懂]

    Linux dstat 监控工具[通俗易懂]简述dstat是一个可以取代vmstat,iostat,netstat和ifstat这些命令的多功能产品。dstat克服了这些命令的局限并增加了一些另外的功能,增加了监控项,也变得更灵活了。dstat可以很方便监控系统运行状况并用于基准测试和排除故障。dstat可以让你实时地看到所有系统资源,例如,你能够通过统计IDE控制器当前状态来比较磁盘利用率,或者直接通过网络带宽数值来比较磁盘…

    2022年6月18日
    30
  • java反射机制原理详解

    java反射机制原理详解????Java学习路线配套文章:Java学习路线总结,搬砖工逆袭Java架构师(全网最强)????基础推荐:Java基础教程系列????实战推荐:SpringBoot基础教程????简介:Java领域优质创作者????、CSDN哪吒公众号作者✌、Java架构师奋斗者????????扫描主页左侧二维码,加入群聊,一起学习、一起进步????欢迎点赞????收藏⭐留言????目录一、前情提要1、需求由于某种原因,您可能在项目中遇到类似的需求:你需要读取一个文件,比

    2022年8月24日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号