后端代码:
@GetMapping("/export")
public void export(HttpServletRequest request, HttpServletResponse response) throws Exception {
// 1.通过poi创建一个excel
Workbook wb = new SXSSFWorkbook();
wb.createSheet().createRow(1).createCell(1).setCellValue("123");
OutputStream os = null;
try {
// 2.设置响应头参数
// 2.1重置response
response.reset();
//设置response的Header
response.addHeader("Content-Disposition", "attachment;filename=" +
java.net.URLEncoder.encode("123.xlsx", "UTF-8"));
os = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
//3.将excel写入到输出流中
wb.write(os);
} catch (Exception e) {
e.printStackTrace();
} finally {
if(os != null)
os.flush();
os.close();
}
}
}
VUE前端请求代码:
excelDown(){
down().then((res) => {
const link = document.createElement('a')
let blob = new Blob([res], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'})
link.style.display = 'none'
link.href = URL.createObjectURL(blob)
// 文件名称,可自定义,也可以从后端获取
link.download = "test"
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
})
}
API:
responseType: ‘blob’ 不要漏写
// 下载
export function down() {
return request({
url: '/excel/export',
method: 'get',
responseType: 'blob',
})
}
运行测试:
网页显示:
excel内容: