前端下载文件(exe,zip,js等)的几种方式

闲来无事,总结一下这些东西:

前端一般通过创建a标签下载文件

图片:分为本地和后端传,本地直接require引入路径后创建a标签下载:

private downFun() {
    let a=document.createElement('a')
    a.style.display = 'none'
    a.setAttribute('download', 'bg.jpg')
    a.href = require('@/assets/bg.jpg')
    document.body.appendChild(a)
    console.log('href', a.href)
    a.click()
    document.body.removeChild(a)
  }

后端传的话需要调用get接口。

其它文件类型下载基本都是一样的 调用后端get接口,使用blob类型

responseType: ‘blob’。进行下载

注意:如果要是本地下载一些静态资源(除图片外) 资源要放在public目录文件下,不然打包后路径你会发现很多报错,下载找不到路径。@这个不会被解析。

附下载代码:

async download(){
    console.log(this.urlName)
    let res = await axios.get(`jt/${this.urlName}`, { responseType: 'blob' })
    const url = window.URL.createObjectURL(res.data)
    const link = document.createElement('a')
    link.href = url;
    link.setAttribute('download', `${this.urlName}`)
    document.body.appendChild(link)
    link.click()
    document.body.removeChild(link)
  }

jt/${this.urlName}

jt是public下的一个文件夹, this.urlName是你要下载的文件的名字。

js原型链详解

首先我们了解原型链要知道,重点在“链”。

先说一下原型链的主要角色 object构造函数,实例化对象(new xxx),原型对象。

把它们想成3个人,每个人手里有一把单向的锁链。

object构造函数的锁是.prototype

实例化对象的锁是内部指针。

原型对象的锁是.constructor

然后这些实例化对象,构造函数,原型对象的关系就是恋爱。实例只能把铁链给原型对象(它深爱原型),原型对象只能给构造函数,而构造函数就是个婊子,拿着钩子对着这2个对象到处甩。甩给原型对象时,大家好好生活只是一个简单的原型链(恋爱网)

​​ 辅助理解

而当构造函数婊子甩给实例话对象时

(注意这时这个实例话对象和之前的那个实例话对象不一样,这是个备胎,当她决定和备胎在一起时,这一套对象流程又可以再来一次,下面放图)

​​ 这一整套构成起来的链接(恋爱网)就是原型链了。