最近在做一个文件下载的功能,测试中发现一个很奇怪的异常java.io.IOException: UT010029: Stream is closed;
我的实际下载文件逻辑代码如下:
@RequestMapping(value = "/bill/testDownload") public Map<String, String> testDownload(@RequestParam(value = "test",required = false) String test,HttpServletResponse response) { Map<String, String> returnMap = new HashMap<String, String>(); returnMap.put("returnCode", "SUCCESS"); logger.info("makeStatementFileService.billDownload result:" + returnMap.toString()); byte[] fileDatas = "测试文件下载".getBytes(); String fileName = "test.txt"; response.setHeader("content-type", "text/html"); response.setHeader("Content-Disposition", "attachment;filename=" + fileName); response.setCharacterEncoding("UTF-8"); ServletOutputStream out = null; try{ out = response.getOutputStream(); out.write(fileDatas); out.flush(); }catch (Exception e) { logger.info("testDownload occurs exception:" + e.getMessage()); }finally { if(null != out){ try{ out.close(); }catch (Exception e) { logger.info("testDownload close OutputStream occurs exception:" + e.getMessage()); } } } return returnMap; } 运行后在浏览器里测试发现文件下载成功,但实际上后台服务器确抛出了下面的异常: java.io.IOException: UT010029: Stream is closed
at io.undertow.servlet.spec.ServletOutputStreamImpl.write(ServletOutputStreamImpl.java:132)
at org.springframework.cloud.sleuth.instrument.web.TraceServletOutputStream.write(TraceServletOutputStream.java:120)
at org.springframework.security.web.util.OnCommittedResponseWrapper$SaveContextServletOutputStream.write(OnCommittedResponseWrapper.java:639)
at com.fasterxml.jackson.core.json.UTF8JsonGenerator._flushBuffer(UTF8JsonGenerator.java:2039)
at com.fasterxml.jackson.core.json.UTF8JsonGenerator.flush(UTF8JsonGenerator.java:1051)
at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:953)
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:292)
at org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:106)
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:231)
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:174)
at org.springframework.web.method.support.HandlerMethodReturnVal