问题记录
- 读取resource/file下的模板文件
- 本独运行情况下,根据文件地址读取文件,但打成jar包后文件会打包在jar包内
classes/file路径内,所以使用src/main/resources/file/路径的方式jar包运行的情况下无法读取到文件
错误代码示例
/**
* 加载模板文件
*
* @param templateName 模板文件名
* @return 模板文件
*/
public static PDDocument getTemplateFile(String templateName, HttpServletResponse response) {
PDDocument document;
try {
String fileName = URLEncoder.encode(templateName, "UTF-8");
response.setContentType("application/pdf");
response.setCharacterEncoding("utf8");
response.setHeader("Content-Disposition", "attachment;filename*=utf-8''" + fileName + ".pdf");
// 加载PDF模板
document = PDDocument.load(new File("src/main/resources/file/" + templateName + ".pdf"));
} catch (IOException e) {
throw new RuntimeException("加载模板文件失败!");
}
return document;
}
使用
new File("src/main/resources/file/" + templateName + ".pdf")的方式获取本地文件,本地运行情况下能正常读取。 开发过程中使用的该方式,项目部署后能正常使用,但经过几次项目更新后又无法获取了(这个问题有待弄清楚);大概率是因为项目部署的方式不同的原因(没有验证)
正确代码示例
public static PDDocument getTemplateFile(String templateName, HttpServletResponse response) {
PDDocument document;
try {
String fileName = URLEncoder.encode(templateName, "UTF-8");
response.setContentType("application/pdf");
response.setCharacterEncoding("utf8");
response.setHeader("Content-Disposition", "attachment;filename*=utf-8''" + fileName + ".pdf");
// 加载PDF模板
InputStream resourceAsStream = PdfUtil.class.getClassLoader().getResourceAsStream("/file/" + templateName + ".pdf");
document = PDDocument.load(resourceAsStream);
} catch (IOException e) {
throw new RuntimeException("加载模板文件失败!");
}
return document;
}