Java 上传大文件在Tomcat中不起作用

Java 上传大文件在Tomcat中不起作用,java,spring,tomcat,upload,Java,Spring,Tomcat,Upload,我有一个web应用程序Java/spring/hibernate在Tomcat7上运行 我设法上传文件很容易,但现在我需要能够上传大文件,我有一个36MB的文件上传 每当我上传一个大文件时,我得到405方法不允许的错误 日志显示以下行: 415157 2014-11-19 14:53:03,662 INFO [http-bio-443-exec-52] com.eloan.controller.api.UploadFileController WFPIRSUM.PRN uploa

我有一个web应用程序Java/spring/hibernate在Tomcat7上运行

我设法上传文件很容易,但现在我需要能够上传大文件,我有一个36MB的文件上传

每当我上传一个大文件时,我得到405方法不允许的错误

日志显示以下行:

415157         2014-11-19 14:53:03,662 INFO [http-bio-443-exec-52] com.eloan.controller.api.UploadFileController WFPIRSUM.PRN uploaded! 
428860         2014-11-19 14:53:17,365 WARN [http-bio-443-exec-52] org.springframework.web.servlet.PageNotFound Request method 'POST' not supported
第一行来自我的代码:

@RequestMapping(value = "/boi", method = RequestMethod.POST)
@CheckSessionAnnotation(type = 99)
@ResponseBody
public Integer upload(MultipartHttpServletRequest request, HttpServletResponse response) throws E000EloanException {
    LenderDetails anss = usService.getCurrentUserLenderDetails();
    int totalLines = 0;

    if (null == anss) { // user not in session...
        throw new E666UserNotInSessionException("User not in Session");
    }

    // this is a fix for IE
    response.setContentType("text/html");

    // 1. build an iterator
    Iterator<String> itr = request.getFileNames();
    MultipartFile mpf = null;

    String doc_type = request.getParameter("doc_type");
    List<String> lines = new ArrayList<String>();
    // 2. get each file
    while (itr.hasNext()) {

        mpf = request.getFile(itr.next());
        LOG.info(mpf.getOriginalFilename() + " uploaded! ");

        try {

            BufferedReader reader = new BufferedReader(new InputStreamReader(mpf.getInputStream(), "Windows-1255"));
            String line = null;
            while ((line = reader.readLine()) != null) {
                // LOG.info("read [" + line + "] doc_tyep [" + doc_type +
                // "]");
                lines.add(line);
                // boiService.addBankOfIsraelEntry(line, doc_type);
                totalLines++;
            }

        } catch (IOException e) {
            LOG.error("File upload error for ", e);
            throw new E107IllegalCallException("File Upload Error");
        }

    } ...
我已尝试在server.xml连接器中设置它:

<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
           maxThreads="150" scheme="https" secure="true" maxPostSize="52428800"
           keystoreFile="/var/lib/tomcat7/conf/keystore" keystorePass="Lj6xK8sk"
           clientAuth="false" sslProtocol="TLS" server="eLoanSecureBSD-Server" />
在web.xml文件中:

<multipart-config>
        <max-file-size>52428800</max-file-size>
        <max-request-size>52428800</max-request-size>
    <file-size-threshold>52428800</file-size-threshold>
    </multipart-config>
这行不通

顺便说一句,当我在eclipse中使用JETTY服务器从主服务器运行时,它运行得非常完美,没有任何问题


谢谢大家

最后,问题只在于Tomcat的内存配置。 我在将org.springframework日志设置为debug之前没有在日志中添加C,这是一个内存不足的异常。我真的无法理解为什么会出现这种情况

在给进程更多内存之后,它就开始正常工作了

我在这里添加了我看过的日志,如果有人感兴趣的话


在内存中读取一个大文件不是很明智,在您的情况下,您将文件存储在内存中,然后开始执行字符串concat,以增加内存和gc周期。你不想在内存中保存两次40Mb的文件。你也可以发布html表单吗?嗨,M.Deinum-我想你明白了-我提高了spring的日志级别,我想我在这个过程中内存不足,这就是为什么它会抛出错误的原因…你能分享上传文件的客户端代码吗?Mithun-我使用的是查询上传文件可以找到
<multipart-config>
        <max-file-size>52428800</max-file-size>
        <max-request-size>52428800</max-request-size>
    <file-size-threshold>52428800</file-size-threshold>
    </multipart-config>

112361         2014-11-19 16:23:42,500 INFO [http-bio-443-exec-22] com.eloan.controller.api.UploadFileController wfpirsum.zip uploaded!     
120026         2014-11-19 16:23:50,165 DEBUG [http-bio-443-exec-22] org.springframework.web.multipart.commons.CommonsMultipartResolver Cleaning up multipart file [files[]] with original filename [wfpirsum.zip], stored at [/var/lib/tomcat7/work/Catalina/localhost/_/upload_54d020ea_b425_473f_a2c7_3dc7d8d4a330_00000001.tmp]    
120043         2014-11-19 16:23:50,182 DEBUG [http-bio-443-exec-22] org.springframework.web.servlet.DispatcherServlet Could not complete request    
org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.OutOfMemoryError: Java heap space    
    at org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1259) ~[spring-webmvc-3.2.0.RELEASE.jar:3.2.0.RELEASE]    
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:945) ~[spring-webmvc-3.2.0.RELEASE.jar:3.2.0.RELEASE]    
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) ~[spring-webmvc-3.2.0.RELEASE.jar:3.2.0.RELEASE]    
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:915) [spring-webmvc-3.2.0.RELEASE.jar:3.2.0.RELEASE]    
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:822) [spring-webmvc-3.2.0.RELEASE.jar:3.2.0.RELEASE]    
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:646) [tomcat-servlet-api-3.0.jar:na]    
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:796) [spring-webmvc-3.2.0.RELEASE.jar:3.2.0.RELEASE]    
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) [tomcat-servlet-api-3.0.jar:na]    
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) [tomcat-catalina-7.0.52.jar:7.0.52]    
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [tomcat-catalina-7.0.52.jar:7.0.52]    
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) [tomcat-catalina-7.0.52.jar:7.0.52]    
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) [tomcat-catalina-7.0.52.jar:7.0.52]    
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:610) [tomcat-catalina-7.0.52.jar:7.0.52]    
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) [tomcat-catalina-7.0.52.jar:7.0.52]    
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) [tomcat-catalina-7.0.52.jar:7.0.52]    
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) [tomcat-catalina-7.0.52.jar:7.0.52]    
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) [tomcat-catalina-7.0.52.jar:7.0.52]    
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) [tomcat-catalina-7.0.52.jar:7.0.52]    
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040) [tomcat-coyote-7.0.52.jar:7.0.52]    
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) [tomcat-coyote-7.0.52.jar:7.0.52]    
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315) [tomcat-coyote-7.0.52.jar:7.0.52]    
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_65]    
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_65]    
    at java.lang.Thread.run(Thread.java:745) [na:1.7.0_65]    
java.lang.OutOfMemoryError: Java heap space    
    at java.util.Arrays.copyOfRange(Arrays.java:2694) ~[na:1.7.0_65]    
    at java.lang.String.<init>(String.java:203) ~[na:1.7.0_65]    
    at java.io.BufferedReader.readLine(BufferedReader.java:349) ~[na:1.7.0_65]    
    at java.io.BufferedReader.readLine(BufferedReader.java:382) ~[na:1.7.0_65]    
    at com.eloan.controller.api.UploadFileController.uploadBankOfIsrael(UploadFileController.java:91) ~[UploadFileController.class:na]    
    at com.eloan.controller.api.UploadFileController$$FastClassByCGLIB$$aa339559.invoke(<generated>) ~[spring-core-3.2.0.RELEASE.jar:na]    
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) ~[spring-core-3.2.0.RELEASE.jar:3.2.0.RELEASE]    
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:698) ~[spring-aop-3.2.0.RELEASE.jar:3.2.0.RELEASE]    
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) ~[spring-aop-3.2.0.RELEASE.jar:3.2.0.RELEASE]    
    at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:80) ~[spring-aop-3.2.0.RELEASE.jar:3.2.0.RELEASE]    
    at com.eloan.aspect.CheckSessionAspect.checkSession(CheckSessionAspect.java:53) ~[CheckSessionAspect.class:na]    
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_65]    
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_65]    
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_65]    
    at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_65]    
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621) ~[spring-aop-3.2.0.RELEASE.jar:3.2.0.RELEASE]    
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610) ~[spring-aop-3.2.0.RELEASE.jar:3.2.0.RELEASE]    
    at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:65) ~[spring-aop-3.2.0.RELEASE.jar:3.2.0.RELEASE]    
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:161) ~[spring-aop-3.2.0.RELEASE.jar:3.2.0.RELEASE]    
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90) ~[spring-aop-3.2.0.RELEASE.jar:3.2.0.RELEASE]    
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) ~[spring-aop-3.2.0.RELEASE.jar:3.2.0.RELEASE]    
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:631) ~[spring-aop-3.2.0.RELEASE.jar:3.2.0.RELEASE]    
    at com.eloan.controller.api.UploadFileController$$EnhancerByCGLIB$$9a9d7ba.uploadBankOfIsrael(<generated>) ~[spring-core-3.2.0.RELEASE.jar:na]    
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_65]    
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_65]    
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_65]    
    at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_65]    
    at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219) ~[spring-web-3.2.0.RELEASE.jar:3.2.0.RELEASE]    
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) ~[spring-web-3.2.0.RELEASE.jar:3.2.0.RELEASE]    
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) ~[spring-webmvc-3.2.0.RELEASE.jar:3.2.0.RELEASE]    
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:746) ~[spring-webmvc-3.2.0.RELEASE.jar:3.2.0.RELEASE]    
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:687) ~[spring-webmvc-3.2.0.RELEASE.jar:3.2.0.RELEASE]    
120056         2014-11-19 16:23:50,195 DEBUG [QuartzScheduler_quartzScheduler-ip-10-101-11-1001416406956159_ClusterManager] org.springframework.jdbc.datasource.DataSourceUtils Returning JDBC Connection to DataSource    
120056         2014-11-19 16:23:50,195 DEBUG [QuartzScheduler_quartzScheduler-ip-10-101-11-1001416406956159_ClusterManager] org.springframework.scheduling.quartz.LocalDataSourceJobStore ClusterManager: Check-in complete.    
120089         2014-11-19 16:23:50,228 DEBUG [http-bio-443-exec-22] org.springframework.web.servlet.DispatcherServlet DispatcherServlet with name 'appServlet' processing POST request for [/404.html]    
120089         2014-11-19 16:23:50,228 DEBUG [http-bio-443-exec-22] org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping Looking up handler method for path /404.html    
120103         2014-11-19 16:23:50,242 DEBUG [http-bio-443-exec-22] org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping Did not find handler method for [/404.html]    
120104         2014-11-19 16:23:50,243 DEBUG [http-bio-443-exec-22] org.springframework.web.servlet.handler.SimpleUrlHandlerMapping Matching patterns for request [/404.html] are [/*.html]    
120104         2014-11-19 16:23:50,243 DEBUG [http-bio-443-exec-22] org.springframework.web.servlet.handler.SimpleUrlHandlerMapping URI Template variables for request [/404.html] are {}    
120104         2014-11-19 16:23:50,243 DEBUG [http-bio-443-exec-22] org.springframework.web.servlet.handler.SimpleUrlHandlerMapping Mapping [/404.html] to HandlerExecutionChain with handler [org.springframework.web.servlet.resource.ResourceHttpRequestHandler@507f1f06] and 1 interceptor    
120105         2014-11-19 16:23:50,244 DEBUG [http-bio-443-exec-22] org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver Resolving exception from handler [org.springframework.web.servlet.resource.ResourceHttpRequestHandler@507f1f06]: org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported    
120106         2014-11-19 16:23:50,245 DEBUG [http-bio-443-exec-22] org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver Resolving exception from handler [org.springframework.web.servlet.resource.ResourceHttpRequestHandler@507f1f06]: org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported    
120106         2014-11-19 16:23:50,245 WARN [http-bio-443-exec-22] org.springframework.web.servlet.PageNotFound Request method 'POST' not supported