首页 > 其他分享 >vuejs实现文件下载的三种方式

vuejs实现文件下载的三种方式

时间:2022-12-19 12:14:42浏览次数:34  
标签:img vuejs url link new 三种 document 下载 row

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

<a :href='"/路径"' >下载模板</a>

另一种情况是创建div标签,动态创建a标签:

<div name="downloadfile" onclick="downloadExcel()">下载</div>

function downloadExcel() {     let a = document.createElement('a')     a.href ="路径"     a.click(); } 还有一种补充: function downloadExcel() {     window.location.href = "/路径"; } 第二种方式通过创建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 = '路径?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)       }     )   }) }

附:vue实现图片或文件下载功能实例

1,这里是调用接口之后如果code=200时进行下载:

if (res.code == 200) {

    const link = document.createElement("a"); //自己创建的a标签     link.href = res.data;     document.body.appendChild(link);     link.click();     document.body.removeChild(link);     window.URL.revokeObjectURL(res.data);   } 2、还有一种情况是下载单张图片,如果用上面方法会直接跳转到了图片链接,并不会实现下载。下面则是下载单张图片的方法: getUrlBase64(imgUrl) {       return new Promise((resolve) => {         let canvas = document.createElement("canvas");         let ctx = canvas.getContext("2d");         let img = new Image(); //允许进行跨域         img.crossOrigin = "Anonymous";         img.src = imgUrl;         img.onload = function() {           canvas.height = img.height; //图片的高度           canvas.width = img.width;//图片的宽度           ctx.drawImage(img, 0, 0, img.width, img.height);           let dataURL = canvas.toDataURL("image/png");           canvas = null;           resolve(dataURL);         };       });     },     //点击下载图片按钮的事件     handleDowondImg(url, name) {       this.getUrlBase64(url).then((base64) => {         const link = document.createElement("a");         link.href = base64;         link.download = this.$route.query.source;         link.click();       });     },

标签:img,vuejs,url,link,new,三种,document,下载,row
From: https://www.cnblogs.com/fxw1996/p/16991821.html

相关文章

  • selenium借助AutoIt识别上传(下载)详解
    AutoIt目前最新是v3版本,这是一个使用类似BASIC​​脚本语言​​​的​​免费软件​​​,它设计用于Windows GUI(​​图形用户界面​​)中进行自动化操作。它利用模拟键盘......
  • selenium webdriver三种浏览器如何处理不受信任的证书
    Hello,Welcometo ​​Seleniumtutorial​​ inthispostwewillseehowto HandleUntrustedCertificateSelenium. WhatisUntrustedSSLcertificate? Whene......
  • [编程基础] C++多线程入门1-创建线程的三种不同方式
    date:2020-05-2916:30:50+0800tags:-编程基础原始C++标准仅支持单线程编程。新的C++标准(称为C++11或C++0x)于2011年发布。在C++11中,引入了新的线程库。因此运行......
  • idea等工具网盘下载地址
    1.idea2020下载地址:https://caiyun.139.com/m/i?1E5C2SkIZbJH4,下载密码微信搜索“白菜拼吧”回复idea2020获取2.secureCRT绿色版下载地址:https://wwb.lanzou......
  • Python安装time库失败?不是吧阿sir你还不知道内置模块不用下载吧
    嗨嗨,今天给python安装time库,一直报错,换源等办法都试过了直到我看到Python中有以下常用模块不用单独安装random模块sys模块time模块os系统操作re正则操作json模块......
  • 这个全新的 “万能文库”下载器,竟然可以下载VIP文档!
    其实,不管是学生党,还是工作党,应该或多或少,都有过在“百度”、“道客”、“豆丁”等文库上面,下载某些材料或模板。当然,以前群里面总有一些人会问:“谁能够帮我在百度文库上面,......
  • CentOS 所有下载
    简述CentOS(CommunityEnterpriseOperatingSystem-社区企业操作系统)是Linux发行版之一,它是来自于RedHatEnterpriseLinux依照开放源代码规定释出的源代码所编译而成。......
  • JDK的下载与删除
    卸载JDK删除Java的安装目录删除JAVA_HOME删除path下关于Java的目录在运行框输入Java-version,是否删除干净安装JDK百度搜索JDK8.找到下载地址同意协......
  • 离线下载和安装UWP(windows应用商店)软件
    离线下载uwp安装包打开商店,然后搜索您要的应用程序名称,进入应用界面点击分享按钮,在弹出窗口中选择【复制链接】把链接粘贴到:https://store.rg-adguard.net/默认选择的......
  • docker高级篇2-分布式存储之三种算法
    面试题:1~2亿条数据需要缓存,请问如何设计这个缓存案例?答:单机单台100%是不可能的。肯定是分布式缓存的。那么用Redis如何落地?一般有三种方案:哈希取余分区;一致性哈希算法分区;哈......