写在前面:直接使用路径,本地可以正常导出,部署到服务器可能不能读取文件,采用字符流的方式可以实现导出功能。
目录:
代码:
1 使用模板填充数据
/**
* EasyPoi导出报表
*
* @param
*/
@Override
public void downloadArtReportEasyPoi(Long downloadId, HttpServletResponse response) throws Exception {
try {
Resource resource = new ClassPathResource("templates/art_template.docx");
InputStream is = new BufferedInputStream(resource.getInputStream());
File templateFile = new File("art/report.docx");
FileUtils.copyInputStreamToFile(is, templateFile);
// 模板结合数据
XWPFDocument word07 = WordExportUtil.exportWord07(templateFile.getPath(), stringObjectMap);
// 导出word
if (monitorArtReport.getSchoolName() != null) {
String filename = monitorArtReport.getYear() + monitorArtReport.getSchoolName() + "工作自评报表.docx";
response.setHeader("content-disposition", "attachment;filename=" + new String(filename.getBytes(), "ISO8859-1"));
response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
word07.write(response.getOutputStream());
}
} catch (Exception e) {
e.printStackTrace();
}
}
2 直接将文件导出
@RequestMapping("/metricDownload")
@ResponseBody
public void download(HttpServletResponse response) {
try{
Resource resource = new ClassPathResource("templates/a.docx");
InputStream fis = new BufferedInputStream(resource.getInputStream());
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
// 清空response
response.reset();
response.setContentType("application/octet-stream;charset=UTF-8");
String filename = "中小学校体育工作评估指标体系";
String fileName = new String(filename.getBytes("gb2312"), "iso8859-1");
response.setHeader("Content-disposition", "attachment;filename=" + fileName);
OutputStream ouputStream = response.getOutputStream();
ouputStream.write(buffer);
ouputStream.flush();
ouputStream.close();
}catch (Exception e){
e.printStackTrace();
logger.error("文件下载出现异常", e);
}
}
结果: