Spring MVC Rest Multipart Upload funktioniert nicht!

Diskutiere Spring MVC Rest Multipart Upload funktioniert nicht! im Application Tier Forum; Hi, ich versuche gerade verzweifelt den multipart upload einzurichten. Ich verwende Spring MVC als Server Backend und habe dort einige rest...

  1. stargate2k
    stargate2k Neues Mitglied
    Hi,

    ich versuche gerade verzweifelt den multipart upload einzurichten. Ich verwende Spring MVC als Server Backend und habe dort einige rest services eingerichtet und als WebFrontend nutze ich Angularjs. Der Fehler hat im Moment nichts mit Angular zutun ich nutze zum testen erst einmal iene normale html seite mit einem Form-Element für den upload und ich nutze keine xml files nur java config.
    Mein aktueller Aufbau sieht so aus:

    Upload controller:

    Code (Java):
    @Controller
    @RequestMapping("Upload")
    @MultipartConfig(fileSizeThreshold=1024*1024*10,    // 10 MB
    maxFileSize=1024*1024*50,          // 50 MB
    maxRequestSize=1024*1024*100)      // 100 MB
    public class UploadController {

        @RequestMapping(value="/upload", method=RequestMethod.GET)
        public @ResponseBody String provideUploadInfo() {
            return "You can upload a file by posting to this same URL.";
        }

        @RequestMapping(value="/upload", method=RequestMethod.POST)
        public @ResponseBody String handleFileUpload(@RequestParam("name") String name,
                @RequestParam("file") MultipartFile file){
            if (!file.isEmpty()) {
                try {
                    byte[] bytes = file.getBytes();
                    BufferedOutputStream stream =
                            new BufferedOutputStream(new FileOutputStream(new File(name + "-uploaded")));
                    stream.write(bytes);
                    stream.close();
                    return "You successfully uploaded " + name + " into " + name + "-uploaded !";
                } catch (Exception e) {
                    return "You failed to upload " + name + " => " + e.getMessage();
                }
            } else {
                return "You failed to upload " + name + " because the file was empty.";
            }
        }

    }
    Webinitializer:

    Code (Text):
    public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

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

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

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

        @Override
        protected Filter[] getServletFilters() {

            CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
            characterEncodingFilter.setEncoding("UTF-8");

            CorsFilter cf=new CorsFilter();
                MultipartFilter mpf=new MultipartFilter(); //MultipartFilter support
            return new Filter[] {characterEncodingFilter,cf,mpf};

        }




    }
    WebCOnfig:

    Code (Text):
    @Configuration
        @EnableWebMvc
        @ComponentScan(basePackages = { "controller" })
        public class WebConfig extends WebMvcConfigurerAdapter {

           @Bean
    public MultipartResolver multipartResolver(){

            return new StandardServletMultipartResolver();
        }

    }
    und ApplicationCOnfig:

    Code (Text):
    @Configuration
    public class AppConfig {

        @Bean
        public Test getTest(){


            return new Test();
        }
    }
    Ich habe nun einfach auf nem selben lokalen Rechner eine html seite mit folgendem Inhalt erstellt:

    PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>

    <form method="POST" enctype="multipart/form-data"
            action="http://localhost:8081/project/Spring/Upload/upload">
            File to upload: <input type="file" name="file"><br /> Name: <input
                type="text" name="name"><br /> <br /> <input type="submit"
                value="Upload"> Press here to upload the file!
        </form>

    </body>
    </html>
    uploaden will ich damit csv files, wenn ich eines auswähle und einen namen vergebe dann kommt folgende Fehlermeldung:

    "HTTP Status 400- Required String parameter 'name' is not present" wenn ich name als nicht required setze dann kommt die selbe Fehlermeldung mit 'file'

    weiß einer wo hier der Fehler liegt ? Habe ich den MultipartUpload falsch eingerichtet oder stimmt irgendwas anderes nicht? Da ich tomcat verwende bzw einen servlet 3 container brauche ich ja diese 2 jars nicht einbinden oder !?
    <!-- Apache Commons Upload -->
    <dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.2.2</version>
    </dependency>
    <!-- Apache Commons Upload -->
    <dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>1.3.2</version>
    </dependency>

    Soweit ich weiß braucht man für den Multipart upload einen MultipartFIlter und den StandardServletMultipartResolver, habe ich diese 2 vll falsch eingebunden oder liegt das Problem wo anderst ?
    mfg stargate
     
    Zuletzt bearbeitet: 14. März 2014
  2. Vielleicht hilft dir das kostenlose Training weiter --> (hier klicken)
  3. Flown
    Flown Administrator Mitarbeiter
    Also da ich auch gerade mit Spring MVC arbeite kann ich dir sagen, dass der Fehler hier liegt:

    Code (Java):

    public @ResponseBody String handleFileUpload(@RequestParam("name") String name,
                @RequestParam("file") MultipartFile file){
     
    Du benötigst beim File einen @RequestBody und keinen @RequestParam, da das File übertragen werden soll und nicht der Name.
     
Die Seite wird geladen...

Spring MVC Rest Multipart Upload funktioniert nicht! - Ähnliche Themen

Spring REST @RequestBody HTTP Error 415
Spring REST @RequestBody HTTP Error 415 im Forum Application Tier
Spring Rest @RequestParam
Spring Rest @RequestParam im Forum Application Tier
Maven, Spring, Tomcat Rest Webservice Tutorial gesucht
Maven, Spring, Tomcat Rest Webservice Tutorial gesucht im Forum Allgemeine Java-Themen
Suche Tutorial für - Spielfiguren springen lassen
Suche Tutorial für - Spielfiguren springen lassen im Forum Bücher, Tutorials und Links
Spring-Boot und Spring Data Programmstart zu langsam
Spring-Boot und Spring Data Programmstart zu langsam im Forum Datenbankprogrammierung
Thema: Spring MVC Rest Multipart Upload funktioniert nicht!