我正在尝试使用多部分/表单数据将文件上传到骆驼路由。一切都很好,但是,我无法获得原始文件名。骆驼版本是: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);
先谢谢你了
爱德华
编辑:既然你已经有了其他的工作,我推荐流缓存选项。
正如Nicolas所建议的,请签出Camel的MIME Multipart数据格式。
此外,您得到“缺少开始边界”的原因是因为您的处理器正在消耗InputStream。您可以尝试reset()
它,但最好只消耗一次InputStream,或者启用流缓存。
除了流缓存,您还可以将流转换为字符串。在处理器之前添加:
.convertBodyTo(String.class)
字符串可以反复读取。如果仍然出现缺少开始边界的错误,请尝试在解组操作之前记录正文。确保消息完好无损,并且它确实包含开始边界。
我有一个Camel/SpringBoot应用程序,它从GraphQLendpoint检索数据,将数据存储在内存数据库(2个表)中,通过运行SQL查询提取CSV文件,然后将文件上传到FTP服务器。由于将提取约350k条记录,我使用SQLs outputType=StreamList、splitter和stream:file。整个路线如下所示: 提取数据时不会出现任何问题,并使用记录创建CSV文件。但
我希望上传一个包含一个文件和一些json的多部分文件,并使用camel rest dsl将该文件输出到本地文件夹。 我在路由中使用处理器,使用HttpServletRequest将多部分请求拆分为多个部分。getPart(),但我收到以下错误: 我已经向 servlet 添加了一个多部分筛选器,并且已经尝试了使用和不使用多部分解决方案 Bean。当我调试处理器时,我可以看到 HttpServlet
我正在尝试创建一个简单的camel应用程序,用于将文件从一个文件夹传输到另一个文件夹。 我想问两个问题 对于,1,我尝试了一些东西,如(基于骆驼停止时,没有文件夹http://camel.apache.org/how-can-i-stop-a-route-from-a-route.html) shutDownProcessor处理器看起来像, 但即使源文件夹为空,似乎也不会调用shutDownPr
我正在研究spring MVC,并使用Apache camel来集成外部服务。我想使用Apache Camel route进行Webservice调用。 就像我的本地REST服务(http://localhostsmiliex.xx:8080/users)从外部REST服务获取数据(http://xxx:000/users)并希望通过路由获取外部数据。 哪个Apache组件适合Jetty或prod
我的骆驼上下文文件如下所示: 我在应用程序中的各种不同endpoint之间有几条其他路由,它们需要重新传递配置,并且按照预期的方式运行。但是,这个特定的路由类型(从文件到队列)似乎并不遵循我配置的任何重新传递策略。当我关闭ActiveMQ代理时,路由会尝试每6秒重新传递一次文件。: 10:54:17,088 WARN c_demo%5GenericFileOnCompletion 105-org.
我的Apache骆驼项目开始有一个相当好的结构,但我陷入了困境,因为我的routeContext中的路由无限执行。我的所有路由都使用SQL组件,我希望所有路由只执行一次。 我发现,当我的routeContext中有两条路由时,两条路由都只执行一次,但是一旦我添加了第三条路由(不管第三条路由是什么),camel就开始无限执行所有路由。我所有的路由都导致sql插入,因此相同的路由运行多次会导致重复键错