Apache camel 如何使用camel http Component将文件上载到运行在apache tomcat服务器上的应用程序?

Apache camel 如何使用camel http Component将文件上载到运行在apache tomcat服务器上的应用程序?,apache-camel,Apache Camel,我的要求是创建一个文件到http的路由,以便使用http组件将文件从文件组件上载到http服务器。 我还想知道这个驼峰http组件是如何工作的。 我们可以使用camel http组件将文件上载到http服务器。这取决于您希望如何提交文件内容。例如,假设CSV中有许多行需要发布到HTML表单。您可能会构建一条路线,例如: 从:从给定路径获取文件 To:将文件中的数据转换为适当的HTTP头(一个简单的POJO可以很好地做到这一点) 收件人:通过HTTP上的POST提交此邮件 如果您想上传整个文件

我的要求是创建一个文件到http的路由,以便使用http组件将文件从文件组件上载到http服务器。 我还想知道这个驼峰http组件是如何工作的。
我们可以使用camel http组件将文件上载到http服务器。

这取决于您希望如何提交文件内容。例如,假设CSV中有许多行需要发布到HTML表单。您可能会构建一条路线,例如:

  • 从:从给定路径获取文件
  • To:将文件中的数据转换为适当的HTTP头(一个简单的POJO可以很好地做到这一点)
  • 收件人:通过HTTP上的POST提交此邮件
如果您想上传整个文件,您可能会看到一个HTTP PUT,该组件也可以执行该PUT。您可能希望将该文件设置为消息的附件,然后使用PUT将其发送到HTTP组件


组件文档在以下位置提供了更好的概述-但您最大的限制似乎是文件组件消费者可以做什么以及应该轮询什么-有关详细信息,请参阅。

根据您的HTTP服务器,您必须采取不同的方法。如果您有给定的情况(Jetty server),您可以使用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");

感谢Decker的回复。我尝试了下面的代码片段来创建从文件组件到http组件的路由。from(“file:inbox?noop=true”).setHeader(“CamelHttpMethod”,HttpMethods.PUT).to(“);但我无法在服务器上接收文件,也没有收到任何异常。我还尝试了POST请求。您使用的是什么版本的Camel?。它应该是(“http:localhost…”),例如http组件