從JAR中讀取檔案,不能使用resource.getFile() 方法,使用resource.getInputStream()
注意如果在JAR中使用resource.getFile(),會報錯。因為當 resource.getFile()方法,Spring是通路一個檔案系統路徑,但是它不能通路JAR中的路徑。可以通過resource.getInputStream()方式來進行擷取檔案資料。
例如:
@GetMapping("/download")
@ApiOperation("下載下傳模闆檔案")
public void download(HttpServletResponse res) {
res.setCharacterEncoding("UTF-8");
res.setHeader("content-type", "application/octet-stream;charset=UTF-8");
res.setContentType("application/octet-stream;charset=UTF-8");
try {
ResourceLoader resourceLoader = new DefaultResourceLoader();
@Cleanup InputStream inputStream = resourceLoader.getResource("classpath:/templates/excel/ActivityTemplate.xlsx").getInputStream();
res.setHeader("Content-Disposition", "attachment;filename=" + java.net.URLEncoder.encode("資料模闆", "UTF-8"));
byte[] fileData = IOUtils.toByteArray(inputStream);
res.getOutputStream().write(fileData);
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}