0

Ich versuche, Datei mit Multipart hochladen.Spring 4 multipart "NullPointerException" Problem

mit Spring 4.2.5 und Google App Engine 1.9.34

jsp Code:

<form method="post" action="/fileUpload.htm" id="uploadForm" 
        enctype="multipart/form-data"> 
<input id="uploadObj" type="file" class="filestyle" data-buttonName="btn-primary" data-badge="false" data-input="false" data-buttonBefore="true" data-buttonText="Choose File" multiple name="files" accept=".doc,.docx,.xls,.xlsx,.pdf,.ppt,.pptx"> 
</form> 

Controller-Code:

@RequestMapping(value="/fileUpload.htm",method=RequestMethod.POST) 
     public String fileUpload(HttpServletRequest request,HttpServletResponse response,HttpSession session,@RequestParam("files") MultipartFile file) throws IOException{ 

     if(!file.isEmpty()){ 
       **** 
     } 
} 

mulitpart bean config:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
    </bean> 

Fehlerprotokoll:

Uncaught exception from servlet 
    java.lang.NullPointerException 
     at java.io.File.<init>(File.java:312) 
     at org.apache.commons.fileupload.disk.DiskFileItem.getTempFile(DiskFileItem.java:582) 
     at org.apache.commons.fileupload.disk.DiskFileItem.getOutputStream(DiskFileItem.java:528) 
     at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:347) 
     at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:115) 
     at org.springframework.web.multipart.commons.CommonsMultipartResolver.parseRequest(CommonsMultipartResolver.java:158) 
     at org.springframework.web.multipart.commons.CommonsMultipartResolver.resolveMultipart(CommonsMultipartResolver.java:142) 
     at org.springframework.web.servlet.DispatcherServlet.checkMultipart(DispatcherServlet.java:1089) 
     at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:928) 
     at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) 
     at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:968) 
     at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:870) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
     at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:844) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
     at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:316) 
     at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:126) 
     at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:90) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
     at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
     at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:122) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
     at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
     at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:169) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
     at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:48) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
     at com.security.GaeAuthenticationFilter.doFilter(GaeAuthenticationFilter.java:90) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
     at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64) 
     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
     at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:91) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
     at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:213) 
     at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:176) 
     at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 
     at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) 
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
     at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:125) 
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
     at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:37) 
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
     at com.google.apphosting.utils.servlet.JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:60) 
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
     at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:50) 
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
     at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 
     at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
     at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
     at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
     at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 
     at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:260) 
     at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
     at org.mortbay.jetty.Server.handle(Server.java:326) 
     at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 
     at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) 
     at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:78) 
     at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
     at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:148) 
     at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:468) 
     at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:437) 
     at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:444) 
     at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:256) 
     at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:308) 
     at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:300) 
     at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:441) 
     at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:235) 
     at java.lang.Thread.run(Thread.java:745) 

Was mache ich falsch? Da

, wenn ich den Code unten verwenden funktioniert alles einwandfrei:

final ServletFileUpload servletFileUpload=new ServletFileUpload(); 
FileItemIterator fileItemIterator=servletFileUpload.getItemIterator(httpServletRequest); 
while(fileItemIterator.hasNext()){ 
    **** 
} 
+0

1. Sie können das Dateisystem nicht in App Engine verwenden. 2. Es ist besser, blobstore für den Datei-Upload https://cloud.google.com/appengine/docs/java/blobstore/#Java_Uploading_a_blob zu verwenden –

Antwort

1

Ich habe das gleiche Problem. Und schließlich löse ich das Problem, indem ich die Systemeigenschaft java.io.tmpdir einstelle.

In appengine-web.xml, und fügt hinzu:

<system-properties> 
    <property name="java.io.tmpdir" value="/"/> 
    ... 
</system-properties> 

Hope Diese Hilfe

0

ich die gleiche Ausnahme bekam, wenn eine FileItemsIterator mit ... Liste fileItemsList = uploader.parseRequest (Anfrage); Iterator fileItemsIterator = fileItemsList.iterator(); ... Vielleicht möchten Sie sich die Lösung using apache fileupload on GAE von systempuntoout ansehen, die stattdessen das Streaming verwendet, das ich ausprobiert habe und es funktioniert.

Verwandte Themen