13

Próbuję tego z wiosennym startem i serwisami internetowymi z dodatkami chrome listonosza.Żądanie zostało odrzucone, ponieważ nie znaleziono granicy wieloczęściowej w Springboot

W listonoszu content-type="multipart/form-data" i otrzymuję poniżej wyjątek.

HTTP Status 500 - Request processing failed; 
nested exception is org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; 
nested exception is java.io.IOException: 
org.apache.tomcat.util.http.fileupload.FileUploadException: the request was rejected because no multipart boundary was found 

kontroler I podano poniższy kod

@ResponseBody 
@RequestMapping(value = "/file", headers = "Content-Type= multipart/form-data", method = RequestMethod.POST) 

public String upload(@RequestParam("name") String name, 
     @RequestParam(value = "file", required = true) MultipartFile file) 
//@RequestParam()CommonsMultipartFile[] fileUpload 
{ 
    // @RequestMapping(value="/newDocument", , method = RequestMethod.POST) 
    if (!file.isEmpty()) { 
     try { 
      byte[] fileContent = file.getBytes(); 
      fileSystemHandler.create(123, fileContent, name); 
      return "You successfully uploaded " + name + "!"; 
     } catch (Exception e) { 
      return "You failed to upload " + name + " => " + e.getMessage(); 
     } 
    } else { 
     return "You failed to upload " + name + " because the file was empty."; 
    } 
} 

Tutaj należy określić plik kod obsługi

public String create(int jonId, byte[] fileContent, String name) { 
    String status = "Created file..."; 
    try { 
     String path = env.getProperty("file.uploadPath") + name; 
     File newFile = new File(path); 
     newFile.createNewFile(); 
     BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(newFile)); 
     stream.write(fileContent); 
     stream.close(); 
    } catch (IOException ex) { 
     status = "Failed to create file..."; 
     Logger.getLogger(FileSystemHandler.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    return status; 
} 
+0

ja również boryka się z tym samym problemem, a jego jedyna praca w listonoszu nie działa w z innymi narzędziami, takimi jak "Advance rest client". czy mogę wiedzieć dlaczego? – Narendhran

Odpowiedz

0

problem nie jest w kodzie .problem ze w swoim wniosku. nie otrzymujesz żadnej granicy w żądaniu wieloczęściowym.

+1

Jak to uzyskać? –

+0

jego błąd serwera 500 jest dla serwera nie ma ograniczenia ustawione, gdy serwer otrzyma obraz –

41

Problem polega na tym, że ustawiasz typ zawartości samodzielnie, niech to będzie puste. Google Chrome zrobi to za Ciebie. Wieloczęściowy Content-Type musi znać granicę pliku, a po usunięciu Content-Type, Postman zrobi to automagicznie dla ciebie.

+2

Dziękuję. To działało dla mnie w Postman. Również odpowiedź z tomeokin pomaga w odczuciu, że Postman nie nadaje się do wszystkich scenariuszy testowych. –

+0

Dzięki rozwiązać mój problem też – erhun

+0

dzięki rozwiązać mój problem też ... –

1

"Listonosz - klient REST" nie nadaje się do wykonywania akcji po ustawieniu właściwości content.You może spróbować użyć "Zaawansowanego klienta REST" lub innych.

Dodatkowo nagłówki zostały zamienione na zużyte i wyprodukowane od wiosny 3.1 M2, patrz https://spring.io/blog/2011/06/13/spring-3-1-m2-spring-mvc-enhancements. I możesz bezpośrednio użyć produces = MediaType.MULTIPART_FORM_DATA_VALUE.

0

Miałem ten sam problem podczas wysyłania żądania POST z Listonosza, a później mogłem rozwiązać problem poprzez ustawienie niestandardowego typu zawartości z wartością graniczną ustawioną wraz z nim w ten sposób.

Uważam, że ludzie mogą napotkać podobny problem i dlatego udostępniam moje rozwiązanie.

postman

5

Nieograniczony typu zawartości w Postman i listonosz automatycznie wykrywa typ zawartości oparty na wejście w czasie wykonywania.

Sample

+0

pracował dla mnie, dzięki! – mangotang

1

Ten pracował dla mnie: Przesyłanie pliku przez Postman, do SpringMVC backend webapp:

Backend: Endpoint controller definition

Listonosz: Headers setup POST Body setup