返回的是 二进制文件:
1、传参类型:两个属性值
form表单格式传参,设置action中的url及方法,点击下载时直接submit
<button @click.prevent='downTemplate'>
<form ref='downTemplate' :action='url' method='POST' targer='downTemplate>
<input type='hidden' name='TICKET' :value='$utils.session.getTicket()'>
<input type='hidden' name='taskId' :value='taskId'>
<iframe name='downTemplate' frameborder='0' width='0' style='display:none'></iframe>
</form>
</button>
downTemplate (){
this.$ref.downTemplate.submit()
}
2、传参类型:一个对象值
!!!可以多文件下载(await),其实是下载一个后再请求另外一个接口,
<button @click='exportData'>导出</button>
<a style='display:none' :href='downloadUrl' ref='download' :download='downTitle'></a>
exportData(){
for (~~~) {
let res = await this.$backend.downloadRequest(url, JSON.stringify(this.search))
// type 根据传输文件的类型不同设置,可截取后端返回的response Headers中的content-type类型,只限制excel可写固定
let blob = new window.Blob([res.data], {type: 'application/vnd.ms-excel'})
let url = window.URL.createObjectURL(blob) // 创建下载链接
this.downloadUrl= url
this.downTitle = name
this.$nextTick(() => {
this.$refs.download.click()
})
}
}
// 下载二进制文件请求 backend中封装的
const downloadRequest = (url, params) => {
return axios({
method: 'post',
url: `${base}${url}`,
data: params,
responseType: 'blob',
headers: {
'Content-Type': 'application/json;charset=utf-8'
}
})
}
返回的是 文件地址:(不需传参)
a标签 href=‘url’ download=‘下载文件名’