SpringBoot 实现下载本项目中文件
文件路径:文件储存在resources下的document目录下,所以先获取resource的路径,然后再加上文件存在的路径
/**
* return File
* path : document/xxxxxx.docx
*/
var file = ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX + path);
完整代码:
public void exportHelpDocument(HttpServletResponse response, HttpServletRequest request, String flag) throws FileNotFoundException {
LOGGER.info("flag {}",flag);
Integer value = Integer.valueOf(flag);
var path = checkFlag(value);
LOGGER.info("path ::: " +
"{}",path);
try {
var file = ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX + path);
var inputStream = new FileInputStream(file);
var outputStream = response.getOutputStream();
response.setCharacterEncoding(request.getCharacterEncoding());
String[] split = path.split("/");
response.setHeader("Content-Disposition",
"attachment; filename="+ URLEncoder.encode(split[1] , "UTF-8"));
response.setContentType("application/zip");
IOUtils.copy(inputStream, outputStream);
response.flushBuffer();
} catch (Exception e) {
e.printStackTrace();
}
}
private String checkFlag(int flag){
LOGGER.info("flag is {}",flag);
switch (flag){
case 0:
return NEW_WINDOWS;
case 1:
return OLD_WINDOWS;
case 2:
return CENTOS;
case 3:
return UBUNTU;
}
return null;
}
注意:!!!!!!!请求下载的时候千万千万不要使用ajax !请求下载的时候千万千万不要使用ajax!请求下载的时候千万千万不要使用ajax!
补充一下上面代码中获取文件路径的方法有点问题,在项目编译之后会无法获取到路径,可以换成
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(path);