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();
}