在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”
时才会上载文件答案 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