可能遇到的问题1:
servlet中使用getServletContext.getRealPath()这个方法受到war 和non-war的影响,以及不同app server实现的影响,所以会得到null,需要换获取绝对路径;
/**
* 模板下载
*/
@RequestMapping("/questionBaseDownload.do")
public void downloadTemplate(HttpServletRequest request,HttpServletResponse response) {
String fileName = "问题选项导入模板.xlsx";
// String path = this.getClass().getClassLoader().getResource("../../WEB-INF/download/").getPath();
String path = this.getClass().getClassLoader().getResource("../../doc/").getPath();
File file = new File(path + "\\" + fileName);
log.info("-------------file----"+file.toString());
try {
if (!file.exists()) {
log.info("downloadTemplate error, template file not exist");
throw new NullPointerException("模板不存在");
}
// 设置响应头,让浏览器下载文件
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
// 文件放到输入流
FileInputStream in = new FileInputStream(path + "\\" + fileName);
// 创建输出流
OutputStream out = response.getOutputStream();
// 创建缓冲区
byte buffer[] = new byte[1024];
int len = 0;
while ((len = in.read(buffer)) > 0) {
// 输出缓冲区的内容到浏览器,实现文件下载
out.write(buffer, 0, len);
}
in.close();
out.close();}catch(Exception e){
log.error("template file download failure,e {}", e);
e.printStackTrace();
}
}
后端提供文件下载,获取文件路径的时候ServletContext.getRealPath 为 null_springboot getservletcontext().getrealpath 为null