SpringBoot下载的excel文件打开时提示需要修复,如下图:
解决办法:给response的Header设置大小:
//加上设置大小 下载下来的excel文件才不会在打开前提示修复
response.addHeader("Content-Length",String.valueOf(file.length()));
完整代码如下:
/**
* 下载文件
* */
@RequestMapping(value = "download")
@ResponseBody
public String download(HttpServletResponse response) throws UnsupportedEncodingException {
String filename = “text.xlsx”
String path = "D:\\Temp\\rpaDownload\\";
File file = new File(path + filename);
if(file.exists()){
response.setContentType("application/octet-stream");
response.setHeader("content-type", "application/octet-stream");
response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(filename,"utf8"));
//加上设置大小 下载下来的excel文件才不会在打开前提示修复
response.addHeader("Content-Length",String.valueOf(file.length()));
byte[] buffer = new byte[1024];
//输出流
OutputStream os = null;
FileInputStream fis = null;
BufferedInputStream bis = null;
try{
fis= new FileInputStream(file);
bis = new BufferedInputStream(fis);
os = response.getOutputStream();
int i = bis.read(buffer);
while(i != -1){
os.write(buffer);
os.flush();
i = bis.read(buffer);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if (os != null) {
os.close();
}
if (fis != null) {
fis.close();
}
if (bis != null) {
bis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
Boolean result = file.delete();
if (!result){
return "failed";
}
}
}
return "index";
}