SpringBoot之下载Excel

下载下来的Excel报如下错误

错误内容: Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃。

解决方案:

核心代码:

//加上设置大小下载下来的.xlsx文件打开时才不会报“Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃”
res.addHeader("Content-Length", String.valueOf(excelFile.length()));

完整代码:

public Result downloadFile(HttpServletResponse res) {
	String realFileName="example.xlsx";
	File excelFile = new File(exampleFilePath);
	res.setCharacterEncoding("UTF-8");
        res.setHeader("content-type", "application/octet-stream;charset=UTF-8");
        res.setContentType("application/octet-stream;charset=UTF-8");
        //加上设置大小下载下来的.xlsx文件打开时才不会报“Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃”
        res.addHeader("Content-Length", String.valueOf(excelFile.length()));
        try {
			res.setHeader("Content-Disposition", "attachment;filename=" + java.net.URLEncoder.encode(realFileName.trim(), "UTF-8"));
        } catch (UnsupportedEncodingException e1) {
			e1.printStackTrace();
		}
		byte[] buff = new byte[1024];
        BufferedInputStream bis = null;
        OutputStream os = null;
        try {
          os = res.getOutputStream();
          bis = new BufferedInputStream(new FileInputStream(new File(exampleFilePath)));
          int i = bis.read(buff);
          while (i != -1) {
            os.write(buff, 0, buff.length);
            os.flush();
            i = bis.read(buff);
          }
        } catch (IOException e) {
          e.printStackTrace();
        } finally {
          if (bis != null) {
            try {
              bis.close();
            } catch (IOException e) {
              log.error("【下载模板】{}",e);
            }
          }
        }
        log.info("【下载模板】成功,exampleFilePath={}",exampleFilePath);
        return ResultUtils.success();
	}

 

posted @ 2019-04-02 15:07  TroubleBoy丶  阅读(475)  评论(0编辑  收藏  举报