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

使用骆驼RestDSL上传分段文件

方宜
2023-03-14

我希望上传一个包含一个文件和一些json的多部分文件,并使用camel rest dsl将该文件输出到本地文件夹。

我在路由中使用处理器,使用HttpServletRequest将多部分请求拆分为多个部分。getPart(),但我收到以下错误:

java.lang.IllegalStateException: No multipart config for servlet

我已经向 servlet 添加了一个多部分筛选器,并且已经尝试了使用和不使用多部分解决方案 Bean。当我调试处理器时,我可以看到 HttpServlet请求请求对象实际上是一个多部分过滤器$包装器,但异常仍在发生。

在html页面中上载表单:

<html>
<body>
    <form action="http://localhost:8080/content/publish" method="post" enctype="multipart/form-data">
        <p>
            Json: <input type="text" name="json"/>
        </p>
        <p>
            File: <input type="file" name="uploadedFile" multiple="true" />
        </p>
        <input type="submit" value="Upload" />
    </form>
</body>
</html>

处理请求的路由:

rest("/content").post("/publish").consumes("multipart/form-data").route().process(new MultipartProcessor()).to("file:src/main/resources/testUpload");

请求:

------WebKitFormBoundaryOAiLMJtrA2g4CB32
Content-Disposition: form-data; name="json"

{ "json" : "test" }
------WebKitFormBoundaryOAiLMJtrA2g4CB32
Content-Disposition: form-data; name="uploadedFile"; filename="test.txt"
Content-Type: text/plain


------WebKitFormBoundaryOAiLMJtrA2g4CB32--

多部分处理器:

@Override
public void process(Exchange exchange) throws Exception {
    HttpMessage message = exchange.getIn(HttpMessage.class);
    HttpServletRequest request = message.getRequest();
    Part file = request.getPart("uploadedFile");
    // then process to output file
}

在网络.xml:

  <servlet>
    <display-name>Camel Http Transport Servlet</display-name>
    <servlet-name>CamelServlet</servlet-name>
    <servlet-class>org.apache.camel.component.servlet.CamelHttpTransportServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>CamelServlet</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

  <filter>
        <filter-name>MultipartFilter</filter-name>
        <filter-class>org.eclipse.jetty.servlets.MultiPartFilter</filter-class>
   </filter>  

   <filter-mapping>
        <filter-name>MultipartFilter</filter-name>
        <servlet-name>CamelServlet</servlet-name>  
   </filter-mapping>

camel-context.xml中的多部分解析器:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>

共有1个答案

董建茗
2023-03-14

检查请求是否是多部分,如果是将您的配置添加到请求中:

if (request.getContentType() != null && request.getContentType().startsWith("multipart/form-data")) {
  request.setAttribute(Request.__MULTIPART_CONFIG_ELEMENT, MULTI_PART_CONFIG);
}

来源:http://jetty.4.x6.nabble.com/jetty-users-Enable-multipart-support-in-Handlers-under-Embedded-jetty-without-XML-configs-or-WebAppCt-td4959804.html

 类似资料:
  • 我有一个Camel/SpringBoot应用程序,它从GraphQLendpoint检索数据,将数据存储在内存数据库(2个表)中,通过运行SQL查询提取CSV文件,然后将文件上传到FTP服务器。由于将提取约350k条记录,我使用SQLs outputType=StreamList、splitter和stream:file。整个路线如下所示: 提取数据时不会出现任何问题,并使用记录创建CSV文件。但

  • 我正在尝试使用多部分/表单数据将文件上传到骆驼路由。一切都很好,但是,我无法获得原始文件名。骆驼版本是:3.14.1 更新 使用对路由的以下修改进行更新。我设法处理二进制文件(获取文件名并存储它们)。但是,对于文本文件,该文件将附加边界页脚: 路线定义: 先谢谢你了 爱德华

  • 我最近注意到Camel现在有自己的Kafka组件,所以我决定给它一个旋转。 我决定尝试一个很好的简单文件->kafka主题如下...

  • 通过打开到同一主机的多个连接(例如、),是否有任何方法可以提高文件传输性能?

  • 问题内容: 我正在使用Spring Boot,并且想要使用Controller来接收分段文件上传。发送文件时,我不断收到 错误415不支持的内容类型 响应,并且永不到达控制器 香港专业教育学院试图在HTML / jsp页面以及使用RestTemplate的独立客户端应用程序中使用form:action发送。所有尝试都给出相同的结果 从分段文档看来,必须将边界参数添加到分段上传中,但这似乎与控制器接

  • 问题内容: 使用Apache-Camel ESB,尝试将xlsx文件上传到Spring Rest Web应用程序。从apache-camel ESB上传失败。但是从Postman上传效果很好。下面共享代码段。 骆驼路由器中的处理器代码如下所示 Pom.xml 错误 当我们使用邮递员访问网络服务时,没有任何错误。能够成功上传服务器。Spring MVC代码, 问题答案: 您可能会在Spring后端日