2013-03-27 59 views
3

我試圖發送帶有文件和兩個輸入到Mule入站端點的表單。我有一個自定義的處理器,並確定這樣一個流程:發送文件到Mule入站端點

<custom-processor class="informa.app.classifier.transformers.MyfileUploadProcessor" name="fileuploadprocessor"></custom-processor> 
<flow name="httpTest"> 
    <http:inbound-endpoint 
        address="http://tango.privada.informa:11002/services/fileupload"></http:inbound-endpoint> 
    <processor ref="fileuploadprocessor"/> 
</flow> 

在類MyfileUploadProcessor:

公共類MyfileUploadProcessor實現MessageProcessor的{

@Override 
    public MuleEvent process(MuleEvent event) throws MuleException { 
     // TODO Auto-generated method stub 
     String response = "success"; 

     MuleMessage mulemessage = event.getMessage(); 

     String countryCode = mulemessage.getInboundProperty("username"); 
     String sourceCode = mulemessage.getInboundProperty("password"); 
     InputStream input = (InputStream) mulemessage.getPayload(); 

... 

,並測試,一簡單的html:

<form action="http://tango.privada.informa:11002/services/fileupload" method="post" 
enctype="multipart/form-data"> 
    <p>Country Code :<input type="text" name="username" /></p> 
    <p>Source Code :<input type="text" name="password" /></p> 
    <p>File :<input type="file" name="payload" /></p> 
    <p><input type="submit" name="submit" value="submit" /> 
<input type="reset" name="reset" value="reset"></p> 
</form> 

</body> 
</html> 

問題是我無法從mulemessage的有效載荷創建文件,我不知道如何獲得輸入值的形式...我做錯了什麼?任何線索?

在此先感謝

回答

3

您需要配置,以處理multipart/form-data HTTP POST到使用org.mule.transport.http.HttpMultipartMuleMessageFactory的HTTP連接。

爲此,添加以下到您的配置:

<http:connector name="httpConnector"> 
    <service-overrides messageFactory="org.mule.transport.http.HttpMultipartMuleMessageFactory"/> 
</http:connector> 

有了這個地方,在​​表單字段將成爲騾消息流的有效載荷和所有其他字段的值將在入境附件(任何部分頭將在入站標頭)。

1

偉大的答案從大衛(一個救生員對我來說!cudos大衛) 什麼是值得一些額外的項目我沒有意識到,首先httpConnector已被用作http傳輸引用一個完整的流將是

<http:connector name="httpConnector" doc:name="HTTP\HTTPS"> 
     <service-overrides 
      messageFactory="org.mule.transport.http.HttpMultipartMuleMessageFactory" /> 
    </http:connector> 

<flow name="AttachmentTestFlow1" doc:name="AttachmentTestFlow1">   
    <http:inbound-endpoint connector-ref="httpConnector" doc:name="HTTP" exchange-pattern="request-response" host="localhost" port="8081"/> 
    <component class="ProcessAttachment" doc:name="Java" /> 
</flow> 

我能夠利用JMeter添加兩個附件上載,第一

  • 具有放慢參數名稱=「有效載荷」以及MIME類型=「多部分/格式數據」
  • 的第二個有我們呃specificed名稱,如「附件」

這然後可以通過正常的騾子流,或組件處理

public String process(@Payload String payload, @InboundAttachments("*") Map<String, DataHandler> headers ) throws IOException{  
    InputStream in = headers.get("attachment").getDataSource().getInputStream(); 
+0

生命的救星到我,因爲即使2年後,感謝你們爲好你分享這一點知識! – 2015-07-03 05:00:07