Camel Apache многослойное сообщение HTTP (загрузка файла)

Как я могу сделать многослойные загрузки файла с помощью Camel Apache компонент HTTP?

10
задан Kai Sternad 10 March 2010 в 09:30
поделиться

4 ответа

Я не знаю, возможно ли отправлять многочастные формы с помощью HTTP компонента.

Если вам нужен обходной путь, вы можете создать POJO Spring Bean, который использует Apache Http Client (и его MultipartPostMethod). Затем вы можете направить ваше сообщение в этот бин:

from("activemq:uploadQueue").to("bean:myApacheHttpClientBean?method=sendMultiPart")
3
ответ дан 4 December 2019 в 02:50
поделиться

Должен ли он использовать Camel?

Apache Fileupload делает это довольно просто http://commons.apache.org/fileupload/using.html

0
ответ дан 4 December 2019 в 02:50
поделиться

Не могли бы вы предоставить более подробную информацию о том, как вы хотите, чтобы многочастичная форма достигла apache camel?

Должна ли это быть какая-то форма на веб-странице, которая отправляется непосредственно на маршрут Camel? Или в очередь AMQ? Я бы предложил вам проверить компоненты Apache HTTP и Apache Jetty.

0
ответ дан 4 December 2019 в 02:50
поделиться

Пока тело вашего сообщения находится в формате 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 в текстовом режиме, выражение со сценарием (например, ... ) и компонент Spring. XSLT хорошо работает, когда тело вашего входящего сообщения уже является XML-документом:

<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>

Однако вам нужно быть осторожным с лишними пробелами. Надеюсь это поможет!

3
ответ дан 4 December 2019 в 02:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: