2014-08-30 128 views
0

我試圖處理最大上傳大小異常,但是我發現所有的解決方案都失敗了,我嘗試執行HandlerExceptionResolver,@ControllerAdvice@ExceptionHandler(MaxUploadSizeExceededException.class)註解的方法,但沒有提供幫助。 在類似問題的答案中,我發現它可能是因爲控制器甚至被調用之前拋出異常,但我沒有對這個問題的這種洞察力,所以我不能自己解決它。
堆棧跟蹤:在Spring webapp中處理MaxUploadSizeExceededException

org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size of 500000 bytes exceeded; nested exception is org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (1065736) exceeds the configured maximum (500000) 
    at org.springframework.web.multipart.commons.CommonsMultipartResolver.parseRequest(CommonsMultipartResolver.java:160) 
    at org.springframework.web.multipart.commons.CommonsMultipartResolver.resolveMultipart(CommonsMultipartResolver.java:139) 
    at org.springframework.web.multipart.support.MultipartFilter.doFilterInternal(MultipartFilter.java:110) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:106) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (1065736) exceeds the configured maximum (500000) 
    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:156) 
    ... 20 more 

和處理multipart解決等等...
SecurityWebAppInitializer.class我的代碼的某些部分 - 我懷疑這MultipartFilter可能是問題的一部分,但它必須是有因爲這http://docs.spring.io/spring-security/site/docs/3.2.0.CI-SNAPSHOT/reference/html/csrf.html#csrf-multipartfilter

@Order(1) 
public class SecurityWebAppInitializer extends AbstractSecurityWebApplicationInitializer { 

    @Override 
    protected void beforeSpringSecurityFilterChain(ServletContext servletContext) { 
     insertFilters(servletContext, new MultipartFilter()); 
    } 

} 

多部分配置

@Configuration 
public class MultipartConfig { 

    @Bean 
    public MultipartResolver filterMultipartResolver() { 
     CommonsMultipartResolver filterMultipartResolver = new CommonsMultipartResolver(); 
     filterMultipartResolver.setMaxUploadSize(500000); 

     return filterMultipartResolver; 
    }   
} 
的個

WebAppInitializer.class

@Order(2) 
public class WebAppInitializer extends 
     AbstractAnnotationConfigDispatcherServletInitializer { 

    @Override 
    protected Class<?>[] getRootConfigClasses() { 
     return new Class<?>[] {MultipartConfig.class, SecurityConfig.class, PersistenceConfig.class }; 
    } 

    @Override 
    protected Class<?>[] getServletConfigClasses() { 
     return new Class<?>[] { DispatcherConfig.class }; 
    } 

    @Override 
    protected String[] getServletMappings() { 
     return new String[] { "/" }; 
    } 

    @Override 
    protected Filter[] getServletFilters() { 

     CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter(); 
     characterEncodingFilter.setEncoding("UTF-8"); 
     return new Filter[] { characterEncodingFilter}; 
    } 

} 

如果您需要Web應用程序的其他一些地方只問。 在此先感謝

+0

這一個將幫助你:http://stackoverflow.com/questions/23856254/how-to-nicely-handle-file-upload-maxuploadsizeexceededexception-with-spring-secu – 2015-01-06 12:54:26

回答

0

如果您不知道最大上傳大小,則不要設置最大上傳大小。 如果你想限制最大上傳大小,那麼你需要考慮否則評論它 下面我已經評論了setter設置最大上傳大小。

@Configuration 
public class MultipartConfig { 

    @Bean 
    public MultipartResolver filterMultipartResolver() { 
     CommonsMultipartResolver filterMultipartResolver = new CommonsMultipartResolver(); 
     //filterMultipartResolver.setMaxUploadSize(500000); 

     return filterMultipartResolver; 
    }   
} 
+0

也是一個解決方案:D感謝上帝我'米只是例子webapp。無論如何,如果有人發現最大上傳大小設置的解決方案,我非常想看到它:) – TheJudge 2014-08-30 11:32:40

1

我抓住它由此類:

@Controller 
public class ExceptionHandlerController implements ErrorController, HandlerExceptionResolver{ 
private static final String PATH = "/error"; 

Logger log = LoggerFactory.getLogger(ExceptionHandlerController.class); 

public String getErrorPath() { 
    return PATH; 
} 

@Override 
public ModelAndView resolveException(HttpServletRequest arg0, 
HttpServletResponse arg1, Object arg2, Exception exception) { 
    log.debug("Captured...."); 
    Map<Object, Object> model = new HashMap<Object, Object>(); 
    //all the exception is here and u can specified it by this exception: MaxUploadSizeExceededException 
    return new ModelAndView("Error", (Map) model); 
} 
} 

我用SpringBoot,所以它需要我實現ErrorController。如果你不那麼就不需要實現它。

希望它有助於尋找這種情況的人。

相關問題