Ich möchte eine mehrteilige Datei hochladen, die eine Datei und einige JSON enthält und die Datei in einem lokalen Ordner mit Kamel Rest dsl ausgeben.Multipart-Datei mit Kamel Rest DSL hochladen
ich einen Prozessor in der Strecke bin mit der mehrteiligen Anforderung in die Teile zu spalten mit HttpServletRequest.getPart() jedoch erhalte ich folgende Fehlermeldung:
java.lang.IllegalStateException: No multipart config for servlet
Ich habe ein MultiPartFilter zum Servlet hinzugefügt und habe versucht mit und ohne MultipartResolver Bean. Wenn ich den Prozessor debugge, kann ich sehen, dass das Request-Objekt HttpServletRequest tatsächlich ein MultiPartFilter $ Wrapper ist, aber die Ausnahme immer noch auftritt.
Upload-Formular in HTML-Seite:
<html>
<body>
<form action="http://localhost:8080/content/publish" method="post" enctype="multipart/form-data">
<p>
Json: <input type="text" name="json"/>
</p>
<p>
File: <input type="file" name="uploadedFile" multiple="true" />
</p>
<input type="submit" value="Upload" />
</form>
</body>
</html>
Strecke die Anforderung zu verarbeiten:
rest("/content").post("/publish").consumes("multipart/form-data").route().process(new MultipartProcessor()).to("file:src/main/resources/testUpload");
Die Anfrage:
------WebKitFormBoundaryOAiLMJtrA2g4CB32
Content-Disposition: form-data; name="json"
{ "json" : "test" }
------WebKitFormBoundaryOAiLMJtrA2g4CB32
Content-Disposition: form-data; name="uploadedFile"; filename="test.txt"
Content-Type: text/plain
------WebKitFormBoundaryOAiLMJtrA2g4CB32--
MultipartProcessor:
@Override
public void process(Exchange exchange) throws Exception {
HttpMessage message = exchange.getIn(HttpMessage.class);
HttpServletRequest request = message.getRequest();
Part file = request.getPart("uploadedFile");
// then process to output file
}
In web.xml:
<servlet>
<display-name>Camel Http Transport Servlet</display-name>
<servlet-name>CamelServlet</servlet-name>
<servlet-class>org.apache.camel.component.servlet.CamelHttpTransportServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CamelServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<filter>
<filter-name>MultipartFilter</filter-name>
<filter-class>org.eclipse.jetty.servlets.MultiPartFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MultipartFilter</filter-name>
<servlet-name>CamelServlet</servlet-name>
</filter-mapping>
Mehrteiliger Resolver in Kamel context.xml:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
für mich exchange.getIn (HttpMessage.class); returns null immer – gstackoverflow
verwandte Frage: https://stackoverflow.com/questions/46930494/camel-saves-full-http-request-but-i-want-only-attached-file – gstackoverflow