我的路径是这样的
public String exportFile(Map<String, Object> data) throws Exception {
// 业务代码
// 创建配置类
Configuration configuration = new Configuration(Configuration.getVersion());
configuration.setClassForTemplateLoading(this.getClass(), "/templates");
// 获取模板文件
Template template = configuration.getTemplate("xxx名称.ftl");
String content = FreeMarkerTemplateUtils.processTemplateIntoString(template, data);
return content;
}
public void downUploadContract(HttpServletResponse response) {
MyUserInfo user = UserUtil.getUser();
Integer id = user.getTSupplier().getId();
TSupplierApprove tSupplierApprove =
tSupplierApproveService.selectJoinOne(
TSupplierApprove.class,
MPJWrappers.lambdaJoin()
.selectAll(TSupplierApprove.class)
.eq(TSupplierApprove::getSupplierId, id));
Map<String, Object> map = new HashMap<String, Object>();
if (tSupplierApprove != null) {
map.put("companyName", tSupplierApprove.getCompanyName());
}
String content = null;
try {
content = exportFile(map);
} catch (Exception e) {
throw new RuntimeException(e);
}
InputStream inputStream = IOUtils.toInputStream(content);
ServletOutputStream out = null;
try {
// 输出文件
response.setHeader("content-type", "application/octet-stream");
response.setContentType("application/octet-stream;charset=UTF-8");
response.setHeader(
"Content-Disposition",
"attachment;filename="
.concat(
String.valueOf(
URLEncoder.encode("xxx名称", "UTF-8") + ".doc")));
out = response.getOutputStream();
byte[] buffer = new byte[1024]; // 缓冲区
int bytesToRead = -1;
// 通过循环将读入的Word文件的内容输出到浏览器中
while ((bytesToRead = inputStream.read(buffer)) != -1) {
out.write(buffer, 0, bytesToRead);
}
} catch (Exception e) {
log.error("导出异常{" + e.getMessage() + "}");
throw new ApiException("9999");
} finally {
try {
out.flush();
out.close();
inputStream.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}