开始的时候经过一番寻找,发现了利用SpringMVC自带的方法实现下载的方法,但是疑惑的是在Chrome浏览器下没问题,在Edge浏览器下会报下载失败,不知道大家有没有遇到这个问题,为啥会这样。
贴出这种方式的代码:
@RequestMapping("template")
public ResponseEntity<byte[]> template() throws IOException {
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
row.createCell(0).setCellValue("工号");
row.createCell(1).setCellValue("姓名");
row.createCell(2).setCellValue("性别");
row.createCell(3).setCellValue("籍贯");
row.createCell(4).setCellValue("手机号");
row.createCell(5).setCellValue("邮箱");
row.createCell(6).setCellValue("部门名称");
row.createCell(7).setCellValue("岗位名称");
row.createCell(8).setCellValue("等级");
row.createCell(9).setCellValue("入职时间");
row.createCell(10).setCellValue("备注");
ByteArrayOutputStream out = new ByteArrayOutputStream();
wb.write(out);
HttpHeaders headers = new HttpHeaders();
String fileName = new String("员工导入模板.xls".getBytes("UTF-8"), "iso-8859-1");
headers.setContentDispositionFormData("attachment", fileName);
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
ResponseEntity<byte[]> filebyte = new ResponseEntity<byte[]>(out.toByteArray() ,headers, HttpStatus.CREATED);
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return filebyte;
}
最后用了更简单直接一些的方法,测试没什么问题:
代码在这里
@RequestMapping("template")
public void template(HttpServletResponse response) throws IOException {
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
row.createCell(0).setCellValue("工号");
row.createCell(1).setCellValue("姓名");
row.createCell(2).setCellValue("性别");
row.createCell(3).setCellValue("籍贯");
row.createCell(4).setCellValue("手机号");
row.createCell(5).setCellValue("邮箱");
row.createCell(6).setCellValue("部门名称");
row.createCell(7).setCellValue("岗位名称");
row.createCell(8).setCellValue("等级");
row.createCell(9).setCellValue("入职时间");
row.createCell(10).setCellValue("备注");
String fileName = URLEncoder.encode("员工导入模板.xls", "utf-8");
response.addHeader("Content-Disposition", "attachment;filename=" + fileName);
response.setContentType("multipart/form-data");
OutputStream out = new BufferedOutputStream(response.getOutputStream());
wb.write(out);
out.close();
}