先说结论,代码顺序问题
response.setContentType("application/octet-stream; charset=UTF-8");
byte[] a = new byte[1000];
while (-1!=ips.read(a)){
ops.write(a);
}
response.setHeader("Content-Disposition","attachment;fileName=template.xlsx");
setHeader的顺序一定要在write前
修正代码
ClassPathResource classPathResource = new ClassPathResource("template/salary.xlsx");
InputStream ips = classPathResource.getInputStream();
OutputStream ops = response.getOutputStream();
response.setContentType("application/octet-stream; charset=UTF-8");
response.setHeader("Content-Disposition","attachment;fileName=template.xlsx");
byte[] a = new byte[1000];
while (-1!=ips.read(a)){
ops.write(a);
}
isCommitted是true导致无法执行后面的set
我们对属性进行debug看下是哪出的问题
因此得出结论,在wirte时,会设置commit=true导致后续设置请求头失效,所以,设置请求头,放在wirte前执行即可