- 后端用poi生成excel对象,通过流输出,测试代码:
ServletOutputStream out = response.getOutputStream();
wb.write(out);
out.flush();
out.close();
- 页面用axios发送请求,根据博客上的说法,也设置了responseType: 'blob'
请求的测试部分:
export function getExcel() {
return request({
url: `${BASE_URL}/meta_db/excel`,
method: 'POST',
responseType: 'blob'
})
}
- 从后台获取的response:
页面打印的response, response.data 现在是一个字符串
- JS 拿到response.data, 生成Blob,生成的xls文件打开全是乱码
测试代码:
getExcel().then(response => {
console.log(response);
console.log(typeof response.data)
let url = window.URL.createObjectURL(new Blob([response.data], {
type: "application/vnd.ms-excel;charset=utf-8"
}))
let link = document.createElement('a')
link.style.display = 'none'
link.href = url
link.setAttribute('download', 'excel.csv')
document.body.appendChild(link)
link.click();
})
结果:
有人知道这个问题的解决办法吗? 谢谢
都是
buffer
能出什么问题,如果你能确定你excel
文档生成没问题,就是本地系统打开excel
出问题。想验证很简单,对比下buffer
就行了,比如做个md5
。