当前位置: 首页 > 知识库问答 >
问题:

上传文件到骆驼Rest路线

奚修伟
2023-03-14

我正在尝试使用多部分/表单数据将文件上传到骆驼路由。一切都很好,但是,我无法获得原始文件名。骆驼版本是: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个答案

单于经纬
2023-03-14

编辑:既然你已经有了其他的工作,我推荐流缓存选项。

正如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插入,因此相同的路由运行多次会导致重复键错