前端vue中实现文件下载的几种方法总结

 更新时间:2023年04月13日 14:46:13   作者:小太阳...  
这篇文章主要介绍了前端vue中实现文件下载的几种方法总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

第一种方式 

前端创建超链接,通过a标签向后端发送get请求,需要给a标签添加一个download属性

这种写法是创造了一个a标签,把地址写到a标签里再用js调用点击,实现访问文件地址就是下载了

代码如下:

   <a
       @click="downloadFile(file.url,file.originalFilename, file.id, file.fileTye)"
     >下载</a>
// 参数分别是:文件的路径 文件的名字 文件的id 文件的类型
  downloadFile(url, fileName, flieId, type) {
     let link = document.createElement('a');
     link.style.display = 'none';
     link.href = baseUrl + '/xxx/xxx/xxx?flieId=' + flieId;
     document.body.appendChild(link);
     link.click();
   },

或者

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

//另一种情况是创建div标签,动态创建a标签:
<div name="downloadfile" "downloadExcel()">下载</div>
function downloadExcel() {
    let a = document.createElement('a')
    a.href ="/xxx/xxx"
    a.click();
} 

第二种方式

通过window.open()下载

window.open就是打开了一个新网页直接在新网页访问文件地址了,只要访问文件地址,就能下载文件。这时候后端返回的是文件流直接渲染,不需要url再打开下载了

  downloadFile() {
    window.open(
      baseUrl + '/xxx/xxx/xxx/getTemplate?templateCode=manual_pc',
      '_self'
    );
  },

第三种方式

通过创建iframe的方式:

<el-button  size="mini" @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格式,这种写法对于图片和pdf及svg能实现下载功能

<a @click="downloadFile(file.name, file.url)" >下载</a>
 
/* 第一个参数是文件的名字,第二个参数是文件的路径*/
 
downloadFile(fileName, fileUrl) {
      if (!fileUrl) {
        return;
      }
      let url = window.URL.createObjectURL(new Blob([fileUrl]));
      let link = document.createElement('a');
      link.style.display = 'none';
      link.href = url;
      link.setAttribute('download', fileName);
      document.body.appendChild(link);
      link.click();
    }

如果后端返回的格式是文件流形式的,就不用转换成Blob形式了。就可以直接简写为:

<a :href="src" rel="external nofollow"  download="name"/> 

因为是文件流下载,所以在取后台数据的时候,要多传递一个【responseType: ‘blob’】这个参数

function downloadPost (config){
  return new Promise((resolve,reject) => {
    axios({
        url: config.url,// 请求地址
        method: 'post',
        data: config.data,// 参数
        responseType: 'blob'// 表明返回服务器返回的数据类型
    }).then(res => {
      resolve(res)
    }).catch(err=>{
      reject(err);
    });
  });
}

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

如果后端提供的下载接口是post类型,就必须要用方法四了。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 深入探究Vue中探究组合式API的奥秘

    深入探究Vue中探究组合式API的奥秘

    Vue 3中引入了组合式API,它是一种新的代码组织方式,旨在让开发者更灵活地组织和重用Vue组件的逻辑,下面我们就来学习一下Vue中常见组合式API的使用吧
    2023-11-11
  • vue2.0开发实践总结之疑难篇

    vue2.0开发实践总结之疑难篇

    这篇文章主要为大家总结了vue2.0开发实践的疑难,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • vue项目使用electron-builder库打包成桌面程序的过程

    vue项目使用electron-builder库打包成桌面程序的过程

    这篇文章主要介绍了vue项目使用electron-builder库打包成桌面程序的过程,本文给大家介绍如何使用electron-builder这个库结合实例代码给大家讲解的非常详细,感兴趣的朋友一起看看吧
    2024-02-02
  • vue cli 3.x 项目部署到 github pages的方法

    vue cli 3.x 项目部署到 github pages的方法

    这篇文章主要介绍了vue cli 3.x 项目部署到 github pages的方法,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-04-04
  • Vue slot插槽作用与原理深入讲解

    Vue slot插槽作用与原理深入讲解

    插槽slot可以说在一个Vue项目里面处处都有它的身影,比如我们使用一些UI组件库的时候,我们通常可以使用插槽来自定义我们的内容,这篇文章主要介绍了Vue3中slot插槽使用方式,需要的朋友可以参考下
    2023-01-01
  • mpvue小程序循环动画开启暂停的实现方法

    mpvue小程序循环动画开启暂停的实现方法

    这篇文章主要介绍了mpvue小程序循环动画开启暂停的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • Vue中keep-alive的两种应用方式

    Vue中keep-alive的两种应用方式

    这篇文章主要介绍了Vue中keep-alive的两种应用方式,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • Vue.js 中的父子组件通信方式实例教程

    Vue.js 中的父子组件通信方式实例教程

    在 Vue.js 中,父子组件通信是非常重要的,在本文中,我们讨论了 Vue.js 中父子组件通信的几种方式,包括使用 props 传递数据、使用 Sync 修饰符实现双向绑定、使用自定义事件传递数据、使用 $refs 访问子组件实例以及使用 $children 和 $parent 访问父子组件实例
    2023-09-09
  • vue 组件中slot插口的具体用法

    vue 组件中slot插口的具体用法

    这篇文章主要介绍了vue 中slot 的具体用法,包括子组件父组件的代码介绍,需要的朋友可以参考下
    2018-04-04
  • vue3实现多个表格同时滚动并固定表头

    vue3实现多个表格同时滚动并固定表头

    这篇文章主要给大家介绍了vue3中多个表格怎么同时滚动并且固定表头,文中通过代码示例给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-02-02

最新评论