2016-08-09 78 views
2

Ich habe hier und im Rest des Webs nach einer Antwort auf den Fehler gesucht, den ich bekomme. Ich entwickle eine Web-App mit Java und Spring-Mvc (und Hibernate zum Verlinken mit einer MySQL-Datenbank). Ich habe unzählige Möglichkeiten ausprobiert, um meine Anwendung zum Hochladen von Dateien zu bewegen. Leider ist ein Fehler aufgetreten, der besagt, dass mein temporärer Upload-Speicherort nicht gültig ist. Um dies zu umgehen ich mehrere Standorte versucht haben, darunter:Der temporäre Upload-Speicherort ist nicht gültig.

  • C: \ Temp \
  • C: \ temp \
  • C:/temp/
  • /WEB-INF/tmp
  • C: \ Users \ Default \ AppData
  • etc

Hier wird der Fehler ich erhalte

org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [C:\Users\take\eclipse\sts-bundle\pivotal-tc-server-developer-3.1.4.RELEASE\base-instance\work\Catalina\localhost\ToolManagementSystem\WEB-INF\tmp] is not valid 
at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipartHttpServletRequest.java:99) 
at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.<init>(StandardMultipartHttpServletRequest.java:77) 
at org.springframework.web.multipart.support.StandardServletMultipartResolver.resolveMultipart(StandardServletMultipartResolver.java:76) 
at org.springframework.web.servlet.DispatcherServlet.checkMultipart(DispatcherServlet.java:1073) 
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:912) 
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) 
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) 
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:648) 
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:279) 
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: java.io.IOException: The temporary upload location [C:\Users\take\eclipse\sts-bundle\pivotal-tc-server-developer-3.1.4.RELEASE\base-instance\work\Catalina\localhost\ToolManagementSystem\WEB-INF\tmp] is not valid 
    at org.apache.catalina.connector.Request.parseParts(Request.java:2751) 
    at org.apache.catalina.connector.Request.getParts(Request.java:2685) 
    at org.apache.catalina.connector.RequestFacade.getParts(RequestFacade.java:1083) 
    at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipartHttpServletRequest.java:84) 
    ... 30 common frames omitted 

Und hier ist mein initializer und die Konfiguration:

public class Initializer implements WebApplicationInitializer { 

private static final String LOCATION = "/WEB-INF/tmp"; 
private static final int MAX_FILE_SIZE = 2097152; 
private static final int MAX_REQUEST_SIZE = 2097152; 
private static final int FILE_SIZE_THRESHOLD = 0; 

public void onStartup(ServletContext servletContext) throws ServletException { 
    AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext(); 
    ctx.register(MvcConfiguration.class); 
    servletContext.addListener(new ContextLoaderListener(ctx)); 

    ctx.setServletContext(servletContext); 

    Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx)); 
    servlet.addMapping("/"); 
    servlet.setLoadOnStartup(1); 
    servlet.setMultipartConfig(getMultipartConfigElement()); 
} 

public MultipartConfigElement getMultipartConfigElement(){ 
    MultipartConfigElement multipartConfigElement = new MultipartConfigElement(LOCATION, MAX_FILE_SIZE, MAX_REQUEST_SIZE, FILE_SIZE_THRESHOLD); 
    return multipartConfigElement; 
} 

}

@Configuration 
@ComponentScan(basePackages = "...*") 
@EnableWebMvc 
@EnableTransactionManagement 
@PropertySource("classpath:application.properties") 
@PropertySource("classpath:views.properties") 
public class MvcConfiguration extends WebMvcConfigurerAdapter { 
private static final String PROPERTY_NAME_DATABASE_DRIVER = "db.driver"; 
private static final String PROPERTY_NAME_DATABASE_PASSWORD = "db.password"; 
private static final String PROPERTY_NAME_DATABASE_URL = "db.url"; 
private static final String PROPERTY_NAME_DATABASE_USERNAME = "db.username"; 

private static final String PROPERTY_NAME_HIBERNATE_DIALECT = "hibernate.dialect"; 
private static final String PROPERTY_NAME_HIBERNATE_SHOW_SQL = "hibernate.show_sql"; 
private static final String PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN = "entitymanager.packages.to.scan"; 
private static final String PROPERTY_NAME_HIBERNATE_HBM2DDL_AUTO = "hibernate.hbm2ddl.auto"; 



@Resource 
private Environment env; 

@Bean 
public DataSource dataSource() { 
    DriverManagerDataSource dataSource = new DriverManagerDataSource(); 

    dataSource.setDriverClassName(env.getRequiredProperty(PROPERTY_NAME_DATABASE_DRIVER)); 
    dataSource.setUrl(env.getRequiredProperty(PROPERTY_NAME_DATABASE_URL)); 
    dataSource.setUsername(env.getRequiredProperty(PROPERTY_NAME_DATABASE_USERNAME)); 
    dataSource.setPassword(env.getRequiredProperty(PROPERTY_NAME_DATABASE_PASSWORD)); 

    return dataSource; 
} 

@Bean 
public LocalSessionFactoryBean sessionFactory() { 
    LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean(); 
    sessionFactoryBean.setDataSource(dataSource()); 
    sessionFactoryBean.setPackagesToScan(env.getRequiredProperty(PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN)); 
    sessionFactoryBean.setHibernateProperties(hibProperties()); 
    return sessionFactoryBean; 
} 

private Properties hibProperties() { 
    Properties properties = new Properties(); 
    properties.put(PROPERTY_NAME_HIBERNATE_DIALECT, env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_DIALECT)); 
    properties.put(PROPERTY_NAME_HIBERNATE_SHOW_SQL, env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_SHOW_SQL)); 
    properties.put(PROPERTY_NAME_HIBERNATE_HBM2DDL_AUTO, env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_HBM2DDL_AUTO)); 
    return properties; 
} 

@Bean 
public HibernateTransactionManager transactionManager() { 
    HibernateTransactionManager transactionManager = new HibernateTransactionManager(); 
    transactionManager.setSessionFactory(sessionFactory().getObject()); 
    return transactionManager; 
} 

@Bean(name="multipartResolver") 
public StandardServletMultipartResolver resolver(){ 
    return new StandardServletMultipartResolver(); 
} 

@Bean 
public ViewResolver getViewResolver1() { 
    ResourceBundleViewResolver resolver = new ResourceBundleViewResolver(); 
    resolver.setOrder(1); 
    resolver.setBasename("views"); 
    return resolver; 
} 

@Bean 
public ViewResolver getViewResolver2() { 
    InternalResourceViewResolver resolver = new InternalResourceViewResolver(); 
    resolver.setOrder(2); 
    resolver.setPrefix("/WEB-INF/jsp/"); 
    resolver.setSuffix(".jsp"); 
    return resolver; 
} 

@Override 
public void addResourceHandlers(ResourceHandlerRegistry registry) { 
    registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); 
} 

* hält basepackage Namen

Ich hoffe, ihr mich in der richtigen Richtung zeigen können, Danke im Voraus! (und wenn ich irgendwie übersehen und das ist eine doppelte Frage, meine Entschuldigung)

+0

Brechen Sie das Problem nach unten konfigurieren kann - versuchen, eine tmp zu C hinzugefügt : \ Benutzer \ take \ eclipse \ sts-bundle \ pivotal-tc-server-developer-3.1.4.RELEASE \ base-instanz \ work \ Catalina \ localhost \ ToolManagementSystem \ WEB-INF \ tmp - dann ist das nächste Problem Ändern Sie den Speicherort, falls erforderlich – farrellmr

+0

Ich habe einen tmp-Ordner unter dem WEB-INF-Ordner, ist das, was Sie verehren? – AlieneilA

+0

Ich habe endlich, was du meintest und das reparierte es! vielen Dank! (Wenn Sie dies als eine Antwort setzen, kann ich Ihnen Credits geben) – AlieneilA

Antwort

2

Erstellen Sie ein Verzeichnis/tmp unter -

C: \ Users \ nehmen \ eclipse \ sts-Bündel \ Schwenk-tc-Server -Entwickler-3.1.4.RELEASE \ base-Instanz \ work \ Catalina \ localhost \ ToolManagementSystem \ WEB-INF

So haben Sie ein Verzeichnis -

C: \ Benutzer \ nehmen \ eclipse \ sts -bundle \ pivotal-tc-server-developer-3.1.4.RELEASE \ Basisinstanz \ work \ Catalina \ localhost \ ToolManagementSystem \ WEB-INF \ tmp

Die andere Option ist das temporäre Verzeichnis durch Ihre tomcat-Konfiguration zu ändern, oder können Sie Feder Boot benutzen, die dies durch eine Auftragungseigenschaft

Dank

+1

re: Spring boot. Es könnte die Antwort verbessern, wenn Sie die Anwendungseigenschaft benannt haben –