我尝试上传一个使用多部分/表单数据的文件到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);
先谢谢你了
爱德华多
1条答案
按热度按时间j0pj023g1#
编辑:由于您已经有了其他的功能,我建议您使用流缓存选项。
正如Nicolas所建议的, checkout Camel的MIME多部分data format。
另外,您得到“缺少起始边界”的原因是因为您的处理器正在使用InputStream。您可以尝试
reset()
它,但最好只使用一次InputStream,或者启用Stream Caching。除了流缓存,您还可以将流转换为字符串。在处理器之前,添加:
可以反复读取该字符串。如果仍然出现缺少起始边界错误,请尝试在解组操作之前记录正文。请确保消息完整,并且确实包含起始边界。