下面是VUE+ElementUI下载文件的几种方式的完整实例教程。
1. 方案选择
为了实现在VUE+ElementUI中下载文件,我们可以采用如下几种方式:
- 跳转到下载链接,通过下载链接直接下载文件;
- 通过axios的get方法下载文件;
- 通过window.open()方法下载文件。
在这三种方式中,方案1和方案3的实现难度较低,但是无法对下载文件进行进度控制;方案2可以对下载文件进行进度控制,但是实现难度较高。因此,我们需要根据实际需要选择相应的方案。
接下来,我们分别介绍这三种方案的实现方式。
2. 跳转到下载链接下载文件
<template>
<div>
<el-button type="primary" @click="download">下载文件</el-button>
</div>
</template>
<script>
export default {
data() {
return {
downloadUrl: '/download/file.xls'
}
},
methods: {
download() {
window.location.href = this.downloadUrl
}
}
}
</script>
在这个小例子中,我们创建了一个名为downloadUrl
的data,存储了要下载的文件的链接。当用户点击“下载文件”按钮时,我们调用download()
方法,跳转到downloadUrl
链接处,从而实现文件下载的功能。
3. 通过axios的get方法下载文件
<template>
<div>
<el-button type="primary" @click="download">下载文件</el-button>
</div>
</template>
<script>
import axios from 'axios'
export default {
data() {
return {
downloadUrl: '/download/file.xls'
}
},
methods: {
download() {
axios({
method: 'get',
url: this.downloadUrl,
responseType: 'blob'
})
.then(response => {
const url = window.URL.createObjectURL(new Blob([response.data]))
const link = document.createElement('a')
link.style.display = 'none'
link.href = url
link.setAttribute('download', 'file.xls')
document.body.appendChild(link)
link.click()
})
.catch(() => {})
}
}
}
</script>
在这个小例子中,我们使用了axios库,通过发出get请求,获取到了一个Blob对象,最终将Blob对象保存为Excel表格文件。
4. 通过window.open()方法下载文件
<template>
<div>
<el-button type="primary" @click="download">下载文件</el-button>
</div>
</template>
<script>
export default {
data() {
return {
downloadUrl: '/download/file.xls'
}
},
methods: {
download() {
window.open(this.downloadUrl)
}
}
}
</script>
在这个小例子中,我们直接使用了window.open()
方法,实现了下载功能,调用方法为打开web页面下载文件。
完整代码可参考https://github.com/ElementUI/element-starter/blob/master/src/views/download/index.vue。
希望这篇文章对你有所帮助,谢谢!