MuleESB - 从http post获取文件

时间:2013-10-16 09:19:18

标签: http curl mule

在Mule我需要通过java操作通过http post发送的xlsx文件。 如何通过java发布文件? 我以为可以通过Mule消息访问,但是

eventContext.getMessage().getOutboundAttachmentNames()

并且都不是

eventContext.getMessage().getInboundAttachmentNames()

给出结果。

有什么想法吗?

进行http post测试我用这种方式使用curl:

curl --form upload=@filename --form press=OK http://localhost:8088/HttpController

流程就是这样的:

    <flow name="xlsx_to_xls_converterFlow1" doc:name="xlsx_to_xls_converterFlow1">
        <http:inbound-endpoint exchange-pattern="request-response"   doc:name="HTTP" address="http://localhost:8088/HttpController"/>
        <logger  level="INFO" doc:name="Logger"/>
        <component class="Convert_XLSXtoXLS" doc:name="Java"/>
</flow>

谢谢

已更新

让标记的解决方案工作以覆盖HttpMultipartMuleMessageFactory的extractPayloadFromHttpRequest以选择正确的输入文件名。 事实上,对于当前的HttpMultipartMuleMessageFactory实现,仅当输入文件名=“payload”

时才会上载文件

2 个答案:

答案 0 :(得分:3)

您需要配置HTTP连接器以处理多部分请求以在附件中接收它们。在其XML配置中添加以下内容:

<service-overrides messageFactory="org.mule.transport.http.HttpMultipartMuleMessageFactory"/>

(如果您认为这很麻烦,请选择https://www.mulesoft.org/jira/browse/MULE-6862

答案 1 :(得分:0)

将Java组件放在http:inbound-endpoint后面会导致InputStream作为组件中方法的参数。

您必须使用输入流或只是在它们之间放置一个回声:

<flow name="FileUpload" doc:name="FileUpload">
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="9090" doc:name="HTTP"/>
    <echo-component doc:name="Echo"/>
    <component class="de.codecentric.basics.FileUploadComponent" doc:name="Java"/>
</flow>

该组件有一种方法:

package de.codecentric.basics;

公共类FileUploadComponent {

public String process(String message) {
System.out.println("message: " + message);
return "OK";
}

}

在这种情况下,您仍然需要解析多部分表单数据。

或尝试使用REST组件,请参阅:http://www.javaroots.com/2013/05/createfileuploadmulejerseyrest.html