2013-04-16 10 views
10

Ich muss Datei vom Browser auf den Server hochladen. Ich benutze Frühling 3.2 als mein Web-Framework.Spring Upload Datei Probleme

Also habe ich meine App so konfiguriert.

1 - Ich habe web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 

    <context-param> 
     <param-name>contextClass</param-name> 
     <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value> 
    </context-param> 

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>racoonsoft.chaos.settings</param-value> 
    </context-param> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <servlet> 
     <servlet-name>MyServlet</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value></param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>MyServlet</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

    <welcome-file-list> 
     <welcome-file>admin/library</welcome-file> 
    </welcome-file-list> 

</web-app> 

2 - MainConfig Klasse

@Configuration 
@Import({WebConfig.class }) 
public class MainConfig { 
    @Bean 
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { 
     return new PropertySourcesPlaceholderConfigurer(); 
    } 

    @Bean 
    public static ScheduledAnnotationBeanPostProcessor scheduledAnnotationBeanPostProcessor() { 
     return new ScheduledAnnotationBeanPostProcessor(); 
    } 

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

3 - Controller-mehrteiliger Uploads

@Controller 
@MultipartConfig(fileSizeThreshold=1024*1024*2, // 2MB 
     maxFileSize=1024*1024*10,  // 10MB 
     maxRequestSize=1024*1024*50) 
public class FileUpload 
{ 
    public static final int UPLOAD_RESULT_OK = 100000; 
    @Autowired 
    BookDao book_dao; 

    @RequestMapping(value = "/admin/library/upload_file", method = RequestMethod.POST) 
    public String saveFiles(@RequestParam("file-file") MultipartFile file) throws IOException 
    { 
     if (!file.isEmpty()) 
     { 
      byte[] bytes = file.getBytes(); 
      return "redirect:caps/total_fail"; 
     } 
     else 
     { 
      return "redirect:caps/total_fail"; 
     } 
    } 
} 

4 zu handhaben - jsp, wo ich meine platziert Formular zum Einreichen von Dateien

Wenn ich meine Form bekam ich eine Ausnahme

org.springframework.web.bind.MissingServletRequestParameterException: Required MultipartFile parameter 'file-file' is not present 
    org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.handleMissingValue(RequestParamMethodArgumentResolver.java:202) 

Ich habe keine Ahnung, warum. Wenn ich @RequestParam annotaion lösche, wurde meine Methode aufgerufen, aber file parameter = null. Was ist mein Problem?

Antwort

5

Ich habe dieses Problem durch Hinzufügen der folgenden zu meinem Frühjahr Konfig-Datei:

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

(Der Fehler war ich war „org.springframework.web.bind.MissingServletRequestParameterException bekommen: Erforderlich MultipartFile Parameter 'myFile' ist nicht vorhanden

0

Sie müssen auch die MultipartFilter für Ihre Webapp konfiguriert. Gemäß seinem Javadoc löst es mehrteilige Anfragen mit dem MultipartResolver (aber Sie haben diesen bereits konfiguriert). Sie müssen es (teilweise) dem Anforderungspfad für Controller zuordnen, der die Dateiuploads verarbeitet.

Fügen Sie zunächst die MultipartFilter zu Ihrem web.xml:

<filter> 
    <filter-name>multipartFilter</filter-name> 
    <filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class> 
</filter> 

Als nächstes Karte den Filter (eines Teils) der URL, Datei-Uploads akzeptieren muss:

<filter-mapping> 
    <filter-name>multipartFilter</filter-name> 
    <url-pattern>/admin/library/upload_file</url-pattern> 
</filter-mapping> 
+1

Ich bin nicht sicher, wie konfiguriere ich es. Muss ich Änderungen an meiner web.xml vornehmen? Oder ich muss meinen eigenen Filter erweitern MultipartFilter erstellen und es auf /admin/library/upload_file ?? – user2160696

+0

Siehe die aktualisierte Antwort für Konfigurationsdetails. – mthmulders

+2

Leider hat es nicht geholfen. Ich habe diese zwei Teile hinzugefügt, aber immer noch Null als Parameter. – user2160696

2

i kann es mit

@Override 
    protected void customizeRegistration(ServletRegistration.Dynamic registration) { 

     MultipartConfigElement multipartConfigElement = new MultipartConfigElement("/",100000, 200000, 50000); 

     registration.setMultipartConfig(multipartConfigElement); 

    } 
1

@ user64141 ist richtig, aber bei Verwendung von Java Config statt xml , versuchen

@Bean 
public MultipartResolver multipartResolver() { 
    return new CommonsMultipartResolver(); 
} 
Verwandte Themen