项目要求实现表格按钮点击下载文件,之前做下载都是直接接接口,这次下载路径在表格中已经返回了,需要在前端处理下载需求。
以下是方法代码
exportExcel() {
axios.defaults.headers['content-type'] = 'application/json;charset=UTF-8'
axios.defaults.headers['TOKEN'] = util.cookies.get('token')
axios({
method: 'get',
url: url, // 请求地址
responseType: 'blob' // 表明返回服务器返回的数据类型
}).then(res => {
let tempName = res.headers['content-disposition'].split(';')[1].split('filename=')[1]
// iconv-lite解决中文乱码
let iconv = require('iconv-lite')
iconv.skipDecodeWarning = true// 忽略警告
let fileName = iconv.decode(tempName, 'utf-8')
let blob = new Blob([res.data], {type: 'application/octet-stream'})//转换成二进制对象
if ('download' in document.createElement('a')) { // 不是IE浏览器
let url = window.URL.createObjectURL(blob)//二进制对象转换成url地址
let link = document.createElement('a')
link.style.display = 'none'
link.href = url
link.setAttribute('download', fileName)
document.body.appendChild(link)
link.click()
document.body.removeChild(link) // 下载完成移除元素
window.URL.revokeObjectURL(url) // 释放掉blob对象
} else {
window.navigator.msSaveBlob(blob, fileName)
}
}, err => {
console.error('download err', err)
})
},
方法二 (其他情况)
【已经确定路径的单一文件】
(直接页面打开,部分文件类型好像实现不了)
templateUpload(){//下载模板
window.open(this.$app_config.api_host +'/excel/daoruyuangong.xlsx')
}
方法三(其他情况)
【(利用a标签实现)利用可传参的接口】
downLoad(id){
let a = document.createElement('a')
a.href = this.config.uploadURL+"/api/activitiesPhotoResources/download?id="+id
a.target = '_blank'//在新窗口打开
a.click();
},
方法四
【写在html里的】
<a :href="$app_config.api_host+`/api/attachments/showFile?path=${encodeURI(row.path)}`" download>
<el-button type="text" size="mini" class="table-btn-reply">下载</el-button>
</a>