0

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

eventContext.getMessage().getOutboundAttachmentNames()

也没有

eventContext.getMessage().getInboundAttachmentNames()

给出结果。

有任何想法吗?

为了进行http post test,我以这种方式使用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”时才会上传文件

4

2 回答 2

3

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

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

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

于 2013-10-16T14:19:29.300 回答
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>

该组件有一种方法:

包 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

于 2013-10-16T13:22:41.817 回答