Kann nicht scheinen, dies herauszufinden, egal was ich versuche. Ich Absenden dieses curl Befehl:Spring Boot + Multipart/Form-Daten-Controller-Methode
curl -v -F name=countries.zip -F [email protected] http://localhost:8080/rest
Ich habe einen Frühling Boot-1.4-App mit einer kommentierten @RestController mit folgender Methode:
@RequestMapping(consumes = {"multipart/form-data"}, method = {RequestMethod.GET, RequestMethod.POST, RequestMethod.PUT, RequestMethod.DELETE}, path = {"/rest", "/rest/**"})
public void handleMultipartRestApiRequest(MultipartHttpServletRequest request, HttpServletResponse response, @RequestPart(value = "filedata", required = false) MultipartFile filedata) throws Exception {
r...
}
Die FILEDATA Variable immer null ist, und das Request-Objekt zeigt immer 0 Dateien an.
Ich habe mehrere Konfigurationen mit einem MultipartResolver versucht. Hier ist meine neueste:
@Bean
public MultipartResolver multipartResolver() {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
multipartResolver.setMaxUploadSize(5000000);
multipartResolver.setMaxInMemorySize(5000000);
multipartResolver.setDefaultEncoding("utf-8");
return multipartResolver;
}
ich auch von Hand stecken diese in meinem application.properties nur 1000% sicher zu sein, es ist nicht deaktiviert:
multipart.enabled=true
spring.http.multipart.enabled = true
und für eine gute Maßnahme, hier sind die Request-Header:
* Connected to localhost (::1) port 8080 (#0)
> POST /rest HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.43.0
> Accept: */*
> Content-Length: 817999
> Expect: 100-continue
> Content-Type: multipart/form-data; boundary=------------------------7d3f4606455e862b
>
Jeder Ahnung warum Ich kann die Datei auf meinem Controller nicht sehen.
UPDATE 1:
Wenn ich weit genug in das Request-Objekt zu graben und zu dem org.catalina.connector.Request Objekt bekommen, gibt es eine Arraylist von ApplicationPart Gegenständen, die eine DiskFileItem enthalten, die Informationen zu halten scheint über die Datei, die ich hochladen möchte. Dies ist die Sammlung, die zurückgegeben wird, wenn Sie request.getParts() aufrufen. Die Datei Punkt Standortpfad ist einige lange tmp Pfad:
/private/var/folders/n8/15d6vbhj0692cslf3cx8c1jm0000gn/T/tomcat.6840182548028446450.8080/work/Tomcat/localhost/myapp
aber es sagt auch der Inhaltstyp application/octet-stream ist, ist die Größe -1 und einige andere Seltsamkeit, wie „isFormField“ ist falsch, auch obwohl ich es als ein Formularfeld in meinem Curl-Befehl spezifiziere. Daher ruft spring die richtige Methode auf, um eine multipart/form-data-Anfrage zu bearbeiten, aber die "part" -Information scheint zu denken, dass es sich um einen Oktettstrom handelt.
Ich glaube bescheiden, dass du dein Multipart-Objekt nicht instanziiert hast. Wie: MultipartFile filedata = fileToBeAdded.getSomething(); –
Nicht sicher, was Sie meinen ... Ich erwarte die Datei in der Anfrage. Wenn ich etwas wie Map map = request.getFileMap(); mache, ist die Map leer. –
Bal
Versuchen Sie '@ RequestParam' anstelle von' @ RequestPart'. –