Как я могу сделать многослойные загрузки файла с помощью Camel Apache компонент HTTP?
Я не знаю, возможно ли отправлять многочастные формы с помощью HTTP компонента.
Если вам нужен обходной путь, вы можете создать POJO Spring Bean, который использует Apache Http Client (и его MultipartPostMethod
). Затем вы можете направить ваше сообщение в этот бин:
from("activemq:uploadQueue").to("bean:myApacheHttpClientBean?method=sendMultiPart")
Должен ли он использовать Camel?
Apache Fileupload делает это довольно просто http://commons.apache.org/fileupload/using.html
Не могли бы вы предоставить более подробную информацию о том, как вы хотите, чтобы многочастичная форма достигла apache camel?
Должна ли это быть какая-то форма на веб-странице, которая отправляется непосредственно на маршрут Camel? Или в очередь AMQ? Я бы предложил вам проверить компоненты Apache HTTP и Apache Jetty.
Пока тело вашего сообщения находится в формате multipart / form-data, вы можете использовать HTTP-компонент Camel для POST его на другой сервер. Уловка состоит в том, чтобы правильно установить Content-Type и установить метод запроса как POST:
<route>
<from uri="direct:start"/>
<setBody>
<![CDATA[
--__MyCoolBoundary__
Content-Disposition: form-data; name="name"
Paul Mietz Egli
--__MyCoolBoundary__
Content-Disposition: form-data; name="email"
paul@example.com
--__MyCoolBoundary__--
]]>
</setBody>
<setHeader headerName="Content-Type">
<constant>multipart/form-data; boundary="__MyCoolBoundary__"</constant>
</setHeader>
<setHeader headerName="CamelHttpMethod">
<constant>POST</constant>
</setHeader>
<to uri="http://www.example.com/mywebservice.php"/>
</route>
Очевидно, что тело примера выше не так полезно, потому что это все статические данные. Существует несколько способов создания тела - я использовал вывод XSLT в текстовом режиме, выражение со сценарием (например,
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
--__MyCoolBoundary__
Content-Disposition: form-data; name="name"
<xsl:value-of select="//name"/>
--__MyCoolBoundary__--
</xsl:stylesheet>
Однако вам нужно быть осторожным с лишними пробелами. Надеюсь это поможет!