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

kq0g1dla  于 2022-11-07  发布在  Apache
关注(0)|答案(2)|浏览(120)

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

1yjd4xko

1yjd4xko1#

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

  • 从:从给定路径获取文件
  • To:将文件中的数据转换为适当的HTTP头(一个简单的POJO就可以很好地完成这项工作)
  • 收件人:通过HTTP上的POST提交

如果你想上传整个文件,你可能会看到一个HTTP PUT,它也可以由组件执行。你可能想把文件设置为消息的附件,然后使用PUT将其发送到HTTP组件。
组件文档在http://camel.apache.org/http4.html中提供了更好的概述-但似乎最大的约束是文件组件 * 消费者 * 可以做什么以及它应该轮询什么-有关详细信息,请参见http://camel.apache.org/file2.html

cotxawn7

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");

相关问题