/**
* 下载文件
* @param content 响应体
* @param fileName 文件名
*/
export function download(content, fileName) {
const blob = new Blob([content]) //创建一个类文件对象:Blob对象表示一个不可变的、原始数据的类文件对象
const url = window.URL.createObjectURL(blob) //URL.createObjectURL(object)表示生成一个File对象或Blob对象
let dom = document.createElement('a') //设置一个隐藏的a标签,href为输出流,设置download
dom.style.display = 'none'
dom.href = url
dom.setAttribute('download', fileName) //指示浏览器下载url,而不是导航到它;因此将提示用户将其保存为本地文件
document.body.appendChild(dom)
dom.click()
}
exportTaskTestReportFun() {
this.exportTaskTestReport({ //接口
projectId: this.projectId,
taskId: this.currentNodeData.id,
taskExcId: this.currentRecord,
})
.then(resp => {
const contentDisposition = resp.headers['content-disposition']
let fileName = 'unknown'
if (contentDisposition) {
fileName = window
.decodeURI(resp.headers['content-disposition'])
.split('=')[1]
}
this.$message.success('导出成功')
download(resp.data, fileName)
})
.catch(err => {
console.error(err)
})
},
exportTaskTestReport(_, {projectId, taskId, taskExcId}) { //记得这里是用get,而不是$get,$get封装过了,会直接去response的data,但是往往下载需要拿到他的文件名,在resp.headers中
return this.$axios.get(
`${BASE}/projects/${projectId}/reports/tasks/${taskId}/${taskExcId}/export-html`,
{
responseType: 'arraybuffer',
},
)
},