2013-10-16 42 views
0

在Mule中,我需要通过java处理通过http post发送的xlsx文件。 如何通过java发布文件? 我认为它通过骡消息是可达但MuleESB - 从http文件中获取文件

eventContext.getMessage().getOutboundAttachmentNames() 

既不

eventContext.getMessage().getInboundAttachmentNames() 

得出的结果。

任何想法?

使HTTP POST测试,我以这种方式使用卷曲:

curl --form [email protected] --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> 

谢谢

修订

要让已标记的解决方案可以覆盖HttpMultipartM的extractPayloadFromHttpRequest uleMessageFactory选择正确的输入文件名。 实际上与当前HttpMultipartMuleMessageFactory执行文件上传仅当输入的文件名=“有效载荷”

回答

3

您需要配置HTTP连接器来处理多部分请求得到他们的附件。添加了XML配置中执行以下操作:

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

(如果你认为这很麻烦,请给予好评https://www.mulesoft.org/jira/browse/MULE-6862

+0

谢谢,它工作。 Upvoted。 – user1820620

+0

实际上这并不足以改变messageFactory。我更新了将解​​决方案放在那里的问题。 – user1820620

0

把一个http后面的Java组件:入站终点结果在一个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

+1

@大卫:解决方案的工作,但上传必须命名为“有效载荷”,例如:curl --form [email protected] http:// localhost:9090如果HttpMultiPartMuleMessageFactory解析所有部分并将它们放在名称为键的Map中会更好。附加说明:服务覆盖必须位于连接器中,而不是端点中。 –