Camel Exchange getbody的文件对象为null

时间:2018-09-19 11:18:29

标签: apache-camel apache-httpcomponents

在我的骆驼路线中,我试图获取文件对象。

rest("/file")
    .post("/extract")
    .to("direct:extract");
    from("direct:extract")
    .process(new Processor() {

        @Override
        public void process(Exchange exchange) throws Exception {
             File file = exchange.getIn().getBody(File.class);
             LOG.info("file : "+file);
     multipartEntityBuilder.addPart("file", new FileBody(file, ContentType.MULTIPART_FORM_DATA,filename));

        }
        })

从这里开始,我正在发送文件,在处理器中,当我尝试通过交换getBody获得时,我正在获取null。 但是同样的事情,如果我尝试获取Inputstream并且byte []意味着它可以正常工作。

    byte[] bytes = exchange.getIn().getBody(byte[].class);
    LOG.info("bytes : "+bytes);
    InputStream is = exchange.getIn().getBody(InputStream.class);

我的目标是从交换getBody中获取文件对象,如果有任何错误,请告诉我。

2 个答案:

答案 0 :(得分:2)

没有java.io.File作为消息正文,因为HTTP文件上载并不表示为java.io.File,而是表示为输入流。 java.io.File用于Camel中的常规文件组件。

答案 1 :(得分:2)

.produces(MediaType.APPLICATION_JSON)
    .consumes(MediaType.MULTIPART_FORM_DATA)
   .to("direct:extract");

    from("direct:extract")

    .setBody().simple("${body}")
    .to("http4://....")
    .end();

您无需将其转换为Byte []或inputstream,您可以将其直接作为主体传递,然后将其设置为主体