2017-09-25 26 views
0

我有上传文件到我的应用程序 选项我在我的应用程序上下文文件中使用springframework的掷不同的错误比净::从OncePerRequestFilter(Java +春)ERR_CONNECTION_REFUSED

设置文件大小的限制

<bean id="multipartResolver" 
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
    <!-- max upload size in bytes --> 
    <property name="maxUploadSize" value="41943040" /> <!-- 40MB --> 
     <!-- max size of file in memory (in bytes) --> 
    <property name="maxInMemorySize" value="1048576" /> <!-- 1MB --> 

</bean> 

CORSFilter一个叫做类扩展OncePerRequestFilter

doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { 
.... more code 

catch(NestedServletException err){ 
      if(err.getRootCause() instanceof MaxUploadSizeExceededException) { 
         response.setStatus(418, StringUtil.getGson().toJson("File must be smaller than" + " 40MB")); 
       response.getWriter().flush(); 
       response.getWriter().close(); 
       throw err; 
      }else { 
       throw err; 
      } 
     } 

现在,如果我检查响应与网络通信后关闭我知道有这种状态的响应 - 但是当我让它“运行”后关闭 在春天的某个地方的网络错误/状态正在复位 和我所得到的最终是网:ERR_CONNECTION_REFUSED

我一直在使用这种方法

@ExceptionHandler(NestedServletException.class) 
@ResponseBody 
public UIException handleValidationException(NotValidException ve, HttpServletResponse httpServletResponse) { 
    LOG.debug(ve.getMessage(), ve); 
    return new UIException(ve); 
} 

尝试,但它并没有停在那里

完整的堆栈跟踪:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size of 41943040 bytes exceeded; nested exception is org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (53990195) exceeds the configured maximum (41943040) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982) 
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:821) 
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1685) 
    at com.amazonaws.xray.javax.servlet.AWSXRayServletFilter.doFilter(AWSXRayServletFilter.java:151) 
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1668) 
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1668) 
    at com.myCompany.web.filter.MultiReadServletFilter.doFilterInternal(MultiReadServletFilter.java:52) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1668) 
    at com.myCompany.web.filter.CORSFilter.doFilterInternal(CORSFilter.java:78) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1668) 
    at com.samaxes.filter.NoCacheFilter.doFilter(NoCacheFilter.java:65) 
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1668) 
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:581) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548) 
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226) 
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1158) 
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511) 
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) 
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1090) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:119) 
    at org.eclipse.jetty.server.Server.handle(Server.java:517) 
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:308) 
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:242) 
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:261) 
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95) 
    at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:75) 
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:213) 
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:147) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572) 
    at java.lang.Thread.run(Thread.java:748) 
Caused by: org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size of 41943040 bytes exceeded; nested exception is org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (53990195) exceeds the configured maximum (41943040) 
    at org.springframework.web.multipart.commons.CommonsMultipartResolver.parseRequest(CommonsMultipartResolver.java:162) 
    at org.springframework.web.multipart.commons.CommonsMultipartResolver.resolveMultipart(CommonsMultipartResolver.java:142) 
    at org.springframework.web.servlet.DispatcherServlet.checkMultipart(DispatcherServlet.java:1099) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:932) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) 
    ... 40 more 
Caused by: org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (53990195) exceeds the configured maximum (41943040) 
    at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:965) 
    at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:310) 
    at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:334) 
    at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:115) 
    at org.springframework.web.multipart.commons.CommonsMultipartResolver.parseRequest(CommonsMultipartResolver.java:158) 
    ... 45 more 

我怎样才能获得网络状态 响应错误(418/file size limit)状态,而不是“ERR_CONNECTION_REFUSED”

+0

它位于堆栈跟踪的顶部。你没有表现,甚至没有说明你是如何得到拒绝的,但可能是因为不适当的重试。解决方案:不要。 – EJP

+0

@EJP 堆栈跟踪来自服务器日志记录 - 客户端没有任何信息发生在服务器上。 我需要在客户端响应这个响应 - 所以他会知道有一个限制 – 2Big2BeSmall

回答

0

here

采取如果您尝试上传超出大小限制的文件大小,则 Tomcat将以默认的2mb将其裁剪d重置连接。为了解决 它迅速,把-1(无限制),用于maxSwallowSize

可能的解决方案:

  • 思想
  • 1尝试把一个合理的限度对于文件上传,例如,11MB(11×1024×1024 =字节)在该例子中
  • Tomcat/conf/server.xml 
        <Connector port="8080" protocol="HTTP/1.1" 
           connectionTimeout="20000" 
           redirectPort="8443" 
           maxSwallowSize="11534336" /> 
    

    2.2并执行一个Javascript来检查上传前的文件大小。

    Jetty怎么样?经过Jetty 9测试,找不到任何 maxSwallowSize设置,如果 文件大小超过了上传限制,它不会导致连接重置。