赞
踩
项目中偶然发现excel文件下载之后,打开会出现这种情况。
网上找了几篇博客,部分博主的原因是打包的时候maven对excel进行了压缩,导致出现问题。
参考:
https://blog.csdn.net/weixin_44601714/article/details/100543960
但是我检查了下我的打包后的文件excel可以正常打开,排除是上面这种原因,推测还是代码出现了问题。
后尝试用poi的workbook进行读写 ,解决问题。
读取表格还是poi专业。
上代码:
@RequestMapping("/downloadTemplate") public Result downloadTemplate(HttpServletResponse response) { Resource resource = new ClassPathResource("基础数据模板.xlsx"); String fileName = "基础数据模板.xlsx";//被下载文件的名称 if (resource.exists()) { response.setContentType("application/binary");// 设置强制下载不打开 try{ response.addHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(fileName, "UTF-8")); }catch (Exception e){ e.printStackTrace(); } byte[] buffer = new byte[1024]; BufferedInputStream bis = null; try { bis = new BufferedInputStream(resource.getInputStream()); XSSFWorkbook workbook = new XSSFWorkbook(bis); OutputStream outputStream = response.getOutputStream(); workbook.write(outputStream); outputStream.flush(); return Result.builder().message("下载成功").code(0).success(true).build(); } catch (Exception e) { e.printStackTrace(); } finally { if (bis != null) { try { bis.close(); } catch (IOException e) { e.printStackTrace(); } } } } return Result.builder().message("下载失败").code(-1).success(false).build(); }
下面是原本有问题的代码,也能进行下载不过在部分excel软件上会出现上述问题:
@RequestMapping("/downloadTemplate") public Result downloadTemplate(HttpServletResponse response) { Resource resource = new ClassPathResource("基础数据模板.xlsx"); String fileName = "基础数据模板.xlsx";//被下载文件的名称 if (resource.exists()) { response.setContentType("application/binary");// 设置强制下载不打开 try{ response.addHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(fileName, "UTF-8")); }catch (Exception e){ e.printStackTrace(); } byte[] buffer = new byte[1024]; BufferedInputStream bis = null; try { bis = new BufferedInputStream(resource.getInputStream()); OutputStream outputStream = response.getOutputStream(); int i = bis.read(buffer); while (i != -1) { outputStream.write(buffer, 0, i); i = bis.read(buffer); } outputStream.flush(); return Result.builder().message("下载成功").code(0).success(true).build(); } catch (Exception e) { e.printStackTrace(); } finally { if (bis != null) { try { bis.close(); } catch (IOException e) { e.printStackTrace(); } } } } return Result.builder().message("下载失败").code(-1).success(false).build(); }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。