excel 文件的下载
- 前端
// 导出
const exportExcel = () => {
axios
.post(
'/comment/export',
{},
{
responseType: 'blob'
}
)
.then((res) => {
const stream = res.data // 后端用stream返回Excel文件
const blob = new Blob([stream])
// 前端获取业务码,成功执行正常业务
const downloadElement = document.createElement('a')
const href = window.URL.createObjectURL(blob) // 创建下载的链接
downloadElement.href = href
downloadElement.download = '测试下载.xlsx' // 下载后文件名
document.body.appendChild(downloadElement)
downloadElement.click() // 点击下载
document.body.removeChild(downloadElement) // 下载完成移除元素
window.URL.revokeObjectURL(href) // 释放掉blob对象
})
}
- 后端导出 excel
const xlsx = require('xlsx')
exportExcel: async (ctx) => {
const jsonData = [
{ username: 'jiang', age: 40 },
{ username: 'jancy', age: 30 },
{ username: 'test', age: 20 }
]
const ws = xlsx.utils.json_to_sheet(jsonData)
const wb = xlsx.utils.book_new() // 创建一个空的workbook
xlsx.utils.book_append_sheet(wb, ws, 'Sheet1')
xlsx.writeFileSync(wb, '导出测试.xlsx')
//类型
ctx.type = '.xlsx'
//请求返回,生成的xlsx文件
ctx.body = fs.readFileSync('导出测试.xlsx')
//请求返回后,删除生成的xlsx文件,不删除也行,下次请求回覆盖
fs.unlink('导出测试.xlsx', (err) => {
if (err) {
console.log(err)
throw err
}
})
}