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

时间:2011-11-28 12:36:56

标签: apache-camel

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

2 个答案:

答案 0 :(得分:3)

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

  • 发件人:从指定路径获取文件
  • 要:将文件中的数据转换为适当的HTTP标头(简单的POJO可以做得很好)
  • 收件人:通过HTTP通过POST
  • 提交

如果要上传整个文件,您可能会查找也可由组件执行的HTTP PUT。您可能希望将文件设置为Message的附件,然后使用PUT将其发送到HTTP组件。

组件文档在http://camel.apache.org/http4.html提供了更好的概述 - 但似乎您最大的限制是文件组件使用者可以执行的操作以及应该轮询的内容 - 请参阅{{3有关详细信息。

答案 1 :(得分:2)

根据您的HTTP服务器,您必须采取不同的方法。如果您有给定的情况(Jetty服务器),您可以使用HTTP4组件上传文件:

HttpClient cliente = HttpClients.createDefault();

    String key ="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";

    try{
        URIBuilder builder= new URIBuilder("https://api.projectoxford.ai/emotion/v1.0/recognize");
        URI uri = builder.build();
        HttpPost request = new HttpPost(uri);

        request.setHeader("Content-type","application/json");
        request.setHeader("Opc-Apim-Subscription-Key",key);

        StringEntity reqEntity = new StringEntity("\"url\": \"http://am-elsalv-cdn.agilecontents.com/resources/jpg/5/3/1458595472835.jpg\"");
        request.setEntity(reqEntity);

        HttpResponse response = cliente.execute(request);
        HttpEntity entity = response.getEntity();

        if(entity!=null){
            System.out.println(EntityUtils.toString(entity));
        }

    }catch(Exception e){
        System.out.println(e.getMessage());
    }

但是,如果服务器只接受多部分请求,则必须更加狡猾,例如使用这样的东西:

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