@GetMapping({"/findTempalte/{fileName}"}) public void exportInitTempalte(HttpServletResponse response, @PathVariable String fileName) { InputStream fis = null; ServletOutputStream toClient = null; try { String path = File.separator + "idmfiles" + File.separator + fileName + ".xlsx"; ClassPathResource classPathResource = new ClassPathResource(path); fis = classPathResource.getInputStream(); //在打成jar包后,可能会出现fis.available()=0的情况,导致下载文件为空白,所以不要 //使用new byte[fis.available()],要直接使用new //byte[1024]或者使用相关工具类IOUtils.toByteArray(fis) //byte[] buffer = new byte[fis.available()]; //fis.read(buffer); byte[] buffer = IOUtils.toByteArray(fis); response.addHeader("Content-Disposition", "attachment;filename="" + fileName + """); response.setContentType("application/octet-stream"); toClient = response.getOutputStream(); toClient.write(buffer, 0, buffer.length); toClient.flush(); } catch (Exception var11) { var11.printStackTrace(); } finally { this.closeStream(toClient, fis); } } private void closeStream(OutputStream os, InputStream inputStream) { if (os != null) { try { os.close(); } catch (IOException var5) { this.log.error(" closeOutputStream error {}", var5.getMessage()); } } if (inputStream != null) { try { inputStream.close(); } catch (IOException var4) { this.log.error(" closeInputStream error {}", var4.getMessage()); } } }
在打成jar包后,可能会出现fis.available()=0的情况,导致下载文件为空白,所以不要
使用new byte[fis.available()],要直接使用new byte[1024]或者使用相关工具类IOUtils.toByteArray(fis)
不要使用:
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
应该使用
byte[] buffer = IOUtils.toByteArray(fis);或者new byte[1024]