【问题标题】:File object is null for Camel Exchange getbodyCamel Exchange getbody 的文件对象为空
【发布时间】:2018-09-19 11:18:29
【问题描述】:

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

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

我的目标是从 Exchange getBody 获取文件对象,有什么问题请告诉我。

【问题讨论】:

    标签: apache-camel apache-httpcomponents


    【解决方案1】:
    .produces(MediaType.APPLICATION_JSON)
        .consumes(MediaType.MULTIPART_FORM_DATA)
       .to("direct:extract");
    
        from("direct:extract")
    
        .setBody().simple("${body}")
        .to("http4://....")
        .end();
    

    不需要转换成Byte[]或者inputstream,直接作为body传递,然后设置为body

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 谢谢,我会尝试输入流。
      • 我也尝试过使用 inputstream,但我无法获得响应,并且我从 POST 发送文件,就像上面的代码一样,如果我通过路径发送文件,我没有得到文件 object/inputstream/bytes[]像 :- from("file:E:/folder4/pdfReceipt?noop=true") 我能够得到响应。
      • 现在我可以使用 byte[] 格式上传 pdf、txt 文件,但相同的代码不适用于图像文件(.jpg、.png),无法上传图像文件。跨度>
      • 当您使用图像与其他类型的文件时,您能否检查 HTTP 标头的 Content-Type 是否设置为正确的类型。
      • 感谢您的帮助,我尝试将 multipart/form-data 作为所有类型文件的消耗 (multipart/form-data) 并且现在可以使用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多