2017-09-25 5 views
0

Ich habe eine Option Datei in meine Anwendung laden ich eine Grenze für die Dateigröße festgelegt haben springWurf andere Fehler als net :: ERR_CONNECTION_REFUSED von OncePerRequestFilter (Java + Frühling)

in meiner Anwendung Context-Datei

<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> 

ich habe eine Klasse namens CORSFiltererstreckt 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; 
      } 
     } 

Nun, wenn ich die Antwort mit einem Netzwerkverkehr kontrolliere direkt nach dem Ende ich weiß, dass die Antwort diesen Status hat - aber wenn ich es „Run“ ließ nach dem Ende irgendwo im Frühjahr des Netzwerkfehler/Status zu sein Reset und was ich schließlich bekommen, ist net: ERR_CONNECTION_REFUSED

habe ich versucht, mit dieser Methode

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

Aber es hat nicht aufgehört dort

Voll Stack-Trace angehängt:

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 

Wie kann ich den Fehler (418/file size limit) Status im Netzwerk Status Antwort und nicht die "ERR_CONNECTION_REFUSED"

+0

Es ist da oben auf der Stack-Trace. Sie zeigen nicht an oder geben an, wie Sie die Verbindungsverweigerung erhalten haben, aber vermutlich war dies das Ergebnis einer unangemessenen Wiederholung. Lösung: nicht. – EJP

+0

@EJP Der Stack-Trace stammt von der Serverprotokollierung - der Client hat keine Informationen darüber, was auf dem Server passiert. Ich brauche diese Antwort auf die Client-Antwort - damit er weiß, dass es ein Limit gibt – 2Big2BeSmall

Antwort

0

Entnommen here

erhalten Wenn Sie versuchen, eine Dateigröße hochzuladen, die die Größenbeschränkung überschritten hat, wird sie von Tomcat auf die Standardgröße 2mb an zugeschnitten d Setzen Sie die Verbindung zurück. Um es schnell zu lösen, setzen Sie einen -1 (unbegrenzt) für maxSwallowSize

Mögliche Lösung:

  1. Idea
  2. 1 Versuchen Sie, eine vernünftige Grenze zu setzen für die Datei-Upload zum Beispiel 11 MB (11 x 1024 x 1024 = Bytes) in diesem Beispiel
Tomcat/conf/server.xml 
    <Connector port="8080" protocol="HTTP/1.1" 
       connectionTimeout="20000" 
       redirectPort="8443" 
       maxSwallowSize="11534336" /> 

2.2 Und implementieren Sie ein Javascript, um die Dateigröße vor dem Upload zu überprüfen.

Was ist mit Jetty? Getestet mit Jetty 9, kann keine maxSwallowSize Einstellung finden, und es wird NICHT eine Verbindung zurückgesetzt, wenn die Dateigröße das Upload-Limit überschritten hat.

Verwandte Themen