我的要求是创建一个文件到http的路由,将文件从文件组件上传到使用http组件的http服务器。我还想知道这个camel http组件是如何工作的。我们可以使用camel http组件将文件上传到http服务器吗?
1yjd4xko1#
这将取决于您希望如何提交文件内容。例如,假设您在CSV中有许多行需要发布到HTML表单。您可能会构建如下路由:
如果你想上传整个文件,你可能会看到一个HTTP PUT,它也可以由组件执行。你可能想把文件设置为消息的附件,然后使用PUT将其发送到HTTP组件。组件文档在http://camel.apache.org/http4.html中提供了更好的概述-但似乎最大的约束是文件组件 * 消费者 * 可以做什么以及它应该轮询什么-有关详细信息,请参见http://camel.apache.org/file2.html。
cotxawn72#
根据您的HTTP服务器,您必须采取不同的方法。如果您有一个给定的情况(Jetty服务器),您可以使用HTTP4组件来上传文件:
from("jetty:http://localhost:8081/upload?httpMethodRestrict=PUT") .log("Uploaded ${body}"); from("file:src/data/jetty?delay=5000&noop=true") .setHeader(Exchange.HTTP_METHOD, constant(HttpMethods.PUT)) .to("http4://localhost:8081/upload");
但是,如果服务器只接受多部分请求,那么您就必须更加巧妙一些,例如,使用如下代码:
from("file:src/data/jersey?delay=5000&noop=true") .process(new Processor() { public void process(Exchange exchange) throws Exception { MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create(); multipartEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); multipartEntityBuilder.addPart("username", username); multipartEntityBuilder.addPart("password", password); String filename = (String) exchange.getIn().getHeader(Exchange.FILE_NAME); File file = exchange.getIn().getBody(File.class); multipartEntityBuilder.addPart("upload", new FileBody(file, MULTIPART_FORM_DATA, filename)); exchange.getIn().setBody(multipartEntityBuilder.build()); } }) .to("http4://localhost:8080/restwb/upload");
2条答案
按热度按时间1yjd4xko1#
这将取决于您希望如何提交文件内容。例如,假设您在CSV中有许多行需要发布到HTML表单。您可能会构建如下路由:
如果你想上传整个文件,你可能会看到一个HTTP PUT,它也可以由组件执行。你可能想把文件设置为消息的附件,然后使用PUT将其发送到HTTP组件。
组件文档在http://camel.apache.org/http4.html中提供了更好的概述-但似乎最大的约束是文件组件 * 消费者 * 可以做什么以及它应该轮询什么-有关详细信息,请参见http://camel.apache.org/file2.html。
cotxawn72#
根据您的HTTP服务器,您必须采取不同的方法。如果您有一个给定的情况(Jetty服务器),您可以使用HTTP4组件来上传文件:
但是,如果服务器只接受多部分请求,那么您就必须更加巧妙一些,例如,使用如下代码: