在jersey中使用+200mb文件发布时出错

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

当我尝试使用超过200mb的附加文件执行多部分表单post时,出现以下错误:

  1. Caused by: java.io.IOException: Error writing to server

我试过:
更改窗口tcp大小(在linux中)https://netbeez.net/blog/tcp-window-size/ 但在windows和linux中,我都遇到了同样的错误
启用压缩和更改 maxPostSize 在apache tomcat 8.5的server.xml中执行以下操作:

  1. <Connector connectionTimeout="20000" port="6660"
  2. protocol="HTTP/1.1" redirectPort="8443"
  3. maxHttpHeaderSize="8192"
  4. maxThreads="150"
  5. minSpareThreads="25"
  6. maxSpareThreads="75"
  7. enableLookups="false"
  8. acceptCount="100"
  9. disableUploadTimeout="true"
  10. compression="on"
  11. compressionMinSize="1024"
  12. noCompressionUserAgents="gozilla, traviata"
  13. compressableMimeType="application/json;charset=UTF-8,text/html,text/xml"
  14. maxPostSize="-1"
  15. maxParameterCount="-1"
  16. maxHeaderCount="-1"
  17. maxSavePostSize="-1"
  18. bufferSize="2048000"
  19. />

但是错误仍然存在,请帮助。。。
编辑1:
客户端代码:

  1. final Client client = ClientBuilder.newBuilder().register(MultiPartFeature.class).build();
  2. final FileDataBodyPart filePart = new FileDataBodyPart("files", file);
  3. FormDataMultiPart formDataMultiPart = new FormDataMultiPart();
  4. final FormDataMultiPart multipart = (FormDataMultiPart) formDataMultiPart //
  5. .field("documentos", body.toString()) //
  6. .field("isForm", "false") //
  7. .bodyPart(filePart);
  8. multipart.bodyPart(new FileDataBodyPart("file", file));
  9. final WebTarget target = client.target(url);
  10. Builder request = target.request();
  11. final Response response = request.post(Entity.entity(multipart, multipart.getMediaType()));

服务器端代码:

  1. @RequestMapping(value = "/document", method = RequestMethod.POST)
  2. public @ResponseBody ResponseEntity<List<Documento>> saveDocument( //
  3. MultipartHttpServletRequest request, //
  4. @RequestParam("documentos") String documentos,
  5. @RequestParam(value = "isForm", required = false) Boolean isForm,
  6. @RequestParam(value = "isManual", required = false) Boolean isManual //
  7. ) throws Exception {

完整堆栈tace如下:

  1. javax.ws.rs.ProcessingException: java.io.IOException: Error writing to server
  2. at org.glassfish.jersey.client.internal.HttpUrlConnector.apply(HttpUrlConnector.java:287)
  3. at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:252)
  4. at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:684)
  5. at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:681)
  6. at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
  7. at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
  8. at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
  9. at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:444)
  10. at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:681)
  11. at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:437)
  12. at org.glassfish.jersey.client.JerseyInvocation$Builder.post(JerseyInvocation.java:343)
  13. ...
  14. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  15. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  16. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  17. at java.lang.reflect.Method.invoke(Method.java:498)
  18. at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209)
  19. at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
  20. at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
  21. at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:870)
  22. at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:776)
  23. at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
  24. at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)
  25. at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)
  26. at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:978)
  27. at org.springframework.web.servlet.FrameworkServlet.doPut(FrameworkServlet.java:892)
  28. at javax.servlet.http.HttpServlet.service(HttpServlet.java:663)
  29. at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:855)
  30. at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
  31. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
  32. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
  33. at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
  34. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
  35. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
  36. at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317)
  37. at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)
  38. at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)
  39. at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
  40. at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114)
  41. at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
  42. at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
  43. at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
  44. at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170)
  45. at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
  46. at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:177)
  47. at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
  48. at com.ecm.sigap.security.auth.SacgAuthenticationFilter.doFilter(SacgAuthenticationFilter.java:186)
  49. at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
  50. at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200)
  51. at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
  52. at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64)
  53. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
  54. at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
  55. at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)
  56. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
  57. at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
  58. at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
  59. at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
  60. at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214)
  61. at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177)
  62. at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357)
  63. at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270)
  64. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
  65. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
  66. at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
  67. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
  68. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
  69. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
  70. ...
  71. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
  72. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
  73. at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
  74. at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
  75. at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
  76. at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
  77. at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
  78. at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
  79. at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
  80. at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
  81. at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:615)
  82. at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
  83. at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:818)
  84. at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1627)
  85. at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
  86. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
  87. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
  88. at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
  89. at java.lang.Thread.run(Thread.java:748)
  90. Caused by: java.io.IOException: Error writing to server
  91. at sun.net.www.protocol.http.HttpURLConnection.writeRequests(HttpURLConnection.java:700)
  92. at sun.net.www.protocol.http.HttpURLConnection.writeRequests(HttpURLConnection.java:712)
  93. at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1591)
  94. at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1498)
  95. at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)
  96. at org.glassfish.jersey.client.internal.HttpUrlConnector._apply(HttpUrlConnector.java:394)
  97. at org.glassfish.jersey.client.internal.HttpUrlConnector.apply(HttpUrlConnector.java:285)
  98. ... 89 more

而且,我忘了提一下,对于小于200mb的文件,端点不会抛出错误,而且一切正常,我确实在服务器端放了一个breakepoint,但它永远不会到达它。

pxy2qtax

pxy2qtax1#

它是spring和它为请求设置的限制,通过以下方式修复:

  1. <bean id="multipartResolver"
  2. class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  3. <property name="maxUploadSize" value="${maxUploadSize}" />
  4. </bean>

相关问题