js vue 直接下载文件,不出现弹窗iframe、a标签

95 阅读1分钟

方式一、新建一个iframe标签,进行下载

<el-button  @click="loadFile" >批量导入</el-button>
 
 loadFile() {
      let url = '文件名.xlsx';
      const iframe = document.createElement('iframe'); // 创建一个HTML 元素
      iframe.style.display = 'none'; // 隐藏iframe 防止影响页面      
      iframe.style.height = 0; // 高度设置0 防止影响页面      
      iframe.src = url;// 下载链接       
      document.body.appendChild(iframe); // iframe挂在到dom树上才会发请求   
            setTimeout(() => { iframe.remove(); }, 5 * 60 * 1000);
        } // 5分钟删掉

方式二、a标签下载

<a href='文件名.xlsx' target='_self'>
    <el-button  @click="loadFile" >批量导入</el-button>
</a>

//点击时的下载事件
choseDownload(fileId, fileType) {
 
    //首先点击下载事件时创建一个a标签
    let link = document.createElement("a");
    //将a标签隐藏
    link.style.display = "none";
    //给a标签添加下载链接  "域名+接口"
    //safe是一个动态的域名(safe是ip地址,需要自己定义)
    //后面拼接的是接口,替换成你自己的下载接口和需要传递的参数
    link.href = this.safe +`/common/download?fileId=` + fileId + "&type=" + fileType;
    // 此处给a标签添加一个download属性,属性值就是文件名称否则下载出来的文件是没有属性的
    //下面代码,name会有斜杠,不影响使用
    link.setAttribute("download", name);
    //将上面创建的a标签加入到body的尾部
    document.body.appendChild(link);
    //最后执行a标签
    link.click();
 
},