前端(大部分省略)
<el-button size="small" type="primary" @click="downloadCarFile">下载模板</el-button>
前端的方法
downloadFile(){
//打开的窗口中要加载的url,_self、_blank、_parent和_top,分别用于在当前窗口、空白窗口、父窗口和顶级窗口中打开该窗口
window.open('/downloadFacultyExcel','_blank')
},
主要使用window.open来访问接口下载文件,使用axios的话会比较麻烦
window.open的解释详见:window.open详解
后端代码
controller层
@Autowired
ExcelDownloadService excelDownloadService;
//上传教职工表格到服务器
@RequestMapping("/downloadFacultyExcel")
@ResponseBody
public String downloadFacultyExcel(HttpServletResponse response){
return excelDownloadService.downloadFacultyExcel(response);
}
@Override
public String downloadFacultyExcel(HttpServletResponse response) {
//创建HSSFWorkbook对象(excel的文档对象)
XSSFWorkbook wb = new XSSFWorkbook();
//建立新的sheet对象(excel的表单)
XSSFSheet sheet = wb.createSheet("教职工表");
//在sheet里创建第一行,参数为行索引(excel的行),可以是0~65535之间的任何一个
//在sheet里创建第1行
XSSFRow row1 = sheet.createRow(0);
//设置表格样式(长度)
sheet.setColumnWidth(0, 256 * 8 + 184);
//在sheet里创建第1行
XSSFRow row1 = sheet.createRow(0);
XSSFCell cell0 = row1.createCell(0);
//设置单元格为文本格式
XSSFCellStyle cellStyle = wb.createCellStyle();
XSSFDataFormat dataFormat = wb.createDataFormat();
cellStyle.setDataFormat(dataFormat.getFormat("@")); //文本格式标记是@符合
//可理解为将这个格式放在第几列
sheet.setDefaultColumnStyle(0, cellStyle);
//创建单元格并设置单元格内容
row1.createCell(0).setCellValue("工号");
row1.createCell(1).setCellValue("姓名");
row1.createCell(2).setCellValue("性别");
row1.createCell(3).setCellValue("职称");
row1.createCell(4).setCellValue("身份证号");
row1.createCell(5).setCellValue("联系电话");
String fileName="教职工表.xlsx";
//Path path = Paths.get(parentPath,fileName);
try {
//输出Excel文件
OutputStream os = response.getOutputStream();
//设置返回体的头部
response.setHeader("content-type", "application/octet-stream");
response.setContentType("application/octet-stream");
response.addHeader("Content-Disposition","attachment;filename="+new String(fileName.getBytes("UTF-8"),"ISO8859-1"));
//将已经生成的excel文件,写入到response.getOutputStream(),输出到前端
wb.write(os);
os.flush();
os.close();
wb.close();
} catch (IOException e) {
e.printStackTrace();
}
return "下载成功!";
}
刚开始遇到的问题就是,使用axios来对后端接口访问有问题,使用window.open后问题解决。
最后:文章有什么问题希望您能提出