vue前端调后台接口下载excel文件
这篇文章主要介绍了前端在后台有下载excel接口的情况下实现get/post下载。
后台提供下载接口,可传参数
使用get方法
1
window.location.href = '/api/xxx/xxx?params'
1
window.open('/api/xxx/xxx?params')
1
<a href="/api/xxx/xxx?params" download="excel.xls">export</a>
get方法参数拼接
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16// 拆分数据
splitData: function (data) {
let url = ''
for (let k in data) {
if (data.hasOwnProperty(k)) {
let value = data[k] || ''
url = url + '&' + k + '=' + encodeURIComponent(value)
}
}
return url ? url.substring(1) : ''
},
// 拼接参数
contractUrl: function (url, data) {
return url + (url.indexOf('?') < 0 ? '?' : '&') + this.splitData(data)
},
使用post方法
直接调用接口是返回表格流文件格式的,可以使用 Blob 对象指定要读取的文件或数据,然后创建a标签下载。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31/**
* 导出excel文件
* @param url 下载地址
* @param data 下载参数
* @param name 下载文件名
*/
export const $export = (url, data, name) => {
let opt = {
url: url,
method: 'post',
responseType: 'blob',
data: data
}
axios.request(opt).then(res => {
// Blob 对象表示一个不可变、原始数据的类文件对象(File 接口都是基于Blob)
const BLOB = res.data
// FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件的内容
const fileReader = new FileReader()
// 开始读取指定的Blob中的内容。读取完成result属性中将包含一个data: URL格式的Base64字符串以表示所读取文件的内容
fileReader.readAsDataURL(BLOB)
// 处理load事件,该事件在读取操作完成时触发
fileReader.onload = (event) => {
let a = document.createElement('a')
a.download = `${name}.xls`
a.href = event.target.result
document.body.appendChild(a)
a.click()
document.body.removeChild(a)
}
})
}
参考
1
https://www.cnblogs.com/zz-zrr/p/11970935.html