将文件上传到Camel Rest路线

vd2z7a6w  于 2022-11-07  发布在  Apache
关注(0)|答案(1)|浏览(206)

我尝试上传一个使用多部分/表单数据的文件到Camel路线。一切都很好,但是,我不能得到原始文件名。Camel版本是:3.14.1

更新通过对路径的以下修改,我设法处理了二进制文件(获取文件名并存储它们)。但是,对于文本文件,文件会附加边界页脚:

------WebKitFormBoundary7BH9nQ2RqDXvTRAJ--

路线定义:

rest("/v1/file-upload-form")
            .post()
            .consumes(MediaType.MULTIPART_FORM_DATA_VALUE)
            .route()
            .process((exchange) -> {
                InputStream is = exchange.getIn().getBody(InputStream.class);
                MimeBodyPart mimeMessage = new MimeBodyPart(is);
                DataHandler dh = mimeMessage.getDataHandler();
                exchange.getIn().setBody(dh.getInputStream());
                exchange.getIn().setHeader(Exchange.FILE_NAME, dh.getName());
            })
            .to("file://" + incomingFolder);

先谢谢你了
爱德华多

j0pj023g

j0pj023g1#

编辑:由于您已经有了其他的功能,我建议您使用流缓存选项。
正如Nicolas所建议的, checkout Camel的MIME多部分data format
另外,您得到“缺少起始边界”的原因是因为您的处理器正在使用InputStream。您可以尝试reset()它,但最好只使用一次InputStream,或者启用Stream Caching
除了流缓存,您还可以将流转换为字符串。在处理器之前,添加:

.convertBodyTo(String.class)

可以反复读取该字符串。如果仍然出现缺少起始边界错误,请尝试在解组操作之前记录正文。请确保消息完整,并且确实包含起始边界。

相关问题