springmvc下载文件ioexception

evrscar2  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(420)

我用springmvc下载大文件;
为什么会发生这种情况,当我使用nginx来模拟文件下载时,没有问题。我尝试http响应
我试过30MB的视频
代码:

  1. @GetMapping({"{id}"})
  2. public void get(@PathVariable String id, HttpServletResponse response) throws IOException {
  3. response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
  4. response.setHeader("Content-Disposition", ContentDisposition.parse("filename=12.mp4").toString());
  5. response.setHeader("Connection", "keep-alive");
  6. response.setStatus(HttpStatus.OK.value());
  7. InputStream inputStream = .....;
  8. OutputStream outputStream = response.getOutputStream()
  9. StreamUtils.copy(inputStream, outputStream);
  10. inputStream.close();
  11. outputStream.close();
  12. }

错误:

  1. org.apache.catalina.connector.ClientAbortException: java.io.IOException: An established connection was aborted by the software in your host machine
  2. at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:341)
  3. at org.apache.catalina.connector.OutputBuffer.flushByteBuffer(OutputBuffer.java:766)
  4. at org.apache.catalina.connector.OutputBuffer.append(OutputBuffer.java:671)
  5. at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:376)
  6. at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:354)
  7. at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:96)
  8. at org.springframework.util.StreamUtils.copy(StreamUtils.java:143)
  9. at com.wzx.oss.service.FileService.writeFileToOutputStream(FileService.java:331)
  10. at com.wzx.oss.controller.FileController.handleFileTransfer(FileController.java:79)
  11. at com.wzx.oss.controller.FileController.get(FileController.java:44)
  12. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  13. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  14. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  15. at java.lang.reflect.Method.invoke(Method.java:498)
  16. at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189)
  17. at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
  18. at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
  19. at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
  20. at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800)
  21. at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
  22. at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038)
  23. at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
  24. at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)
  25. at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897)
  26. at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
  27. at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)
  28. at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
  29. ...
wz3gfoph

wz3gfoph1#

我的问题解决了
非常感谢你的回答,屋大维。
内容配置:协议决定如何保存程序
需要添加响应头,而不是缓存

  1. response.setHeader("Pragma", "No-cache");
  2. response.setHeader("Cache-Control", "No-cache");
  3. response.setDateHeader("Expires", 0);

相关问题