我的要求是创建一个文件到http路由,使用http组件将文件从文件组件上传到http服务器。 我也想知道这个骆驼http组件是如何工作的。 我们可以使用camel http组件将文件上传到http服务器。
答案 0 :(得分:3)
这取决于您希望如何提交文件内容。例如,假设您在CSV中有许多行需要发布到HTML表单。您可能会建立一条路线,例如:
如果要上传整个文件,您可能会查找也可由组件执行的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");