2015-12-30 110 views
0

我必須創建一個multipart/form-data HTTP請求,其中將從一個請求接收文件,並從一些請求中獲取一些額外的表單數據值。例如:從多個HTTP響應中創建多部分請求

1)HTTP監聽接收文件作爲附件
2)發送HTTP請求到3個或更多的REST API,並且存儲的值到屬性變量
3)創建與所述文件的HTTP請求在步驟1中接收到的以及在步驟2中收到的值

當我在步驟1中收到文件時,將它保存在一個屬性中,我還將後續請求中的值保存到不同的屬性中。

現在當我在步驟3中從這些屬性構造HTTP POST請求時,我沒有收到服務器上的任何值,包括字段和文件。

我的流程:

<http:request-config name="HTTP_poster_Configuration" host="localhost" port="53536" doc:name="HTTP Poster Configuration"/> 
 
<http:request-config name="HTTP_Request_Configuration" host="1.1.1.1" basePath="/xyz" port="8080" doc:name="HTTP Request Configuration"/> 
 
    <http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration"/> 
 
    
 
    
 
    <flow name="getticketFlow"> 
 
     <http:listener config-ref="HTTP_Listener_Configuration" path="/" doc:name="HTTP"/> 
 

 

 
     
 

 
     <set-session-variable variableName="var1" value="NA" doc:name="Session Variable" /> 
 
     
 
     <set-variable variableName="var2" value="P11335577" doc:name="Flow name Variable" /> 
 
      <set-variable variableName="var3" value="Goku" doc:name="Flow title Variable" /> 
 
      <set-variable variableName="var4" value="Saiyan Dead but Alive" doc:name="Flow description Variable" /> 
 
      
 
    \t <set-variable variableName="uploadFile" value="#[message.inboundAttachments['file'].dataSource.content]" doc:name="Flow type Variable" /> 
 
       
 
.................Sending requests to other services 
 
...................Setting property Variables  
 

 
<!-- Finally --> 
 
\t \t <http:request config-ref="HTTP_poster_Configuration" path="/handler" method="POST" doc:name="Uploading_Doc" > 
 
      \t <http:request-builder> 
 
       <http:query-param paramName="filedata" value="#[flowVars ['uploadFile']]"/> 
 
      
 
       <http:query-param paramName="sid" value="#[flowVars ['var1']]"/> 
 
       <http:query-param paramName="cid" value="#[flowVars ['var2']]"/> 
 
       <http:query-param paramName="udi" value="#[flowVars ['var3']]"/> 
 

 
       <http:header headerName="Content-Type" value="multipart/form-data"/> 
 
      \t </http:request-builder> 
 
      
 
     
 
     \t \t </http:request> 
 
    
 
      
 
     
 
    </flow> 
 
</mule>

回答

0

如果你想要的是送你需要添加的一切作爲附件,而不是查詢參數的文件,並在隨後一個多要求的其他數據在你的流程中。然後每個附件將轉化爲請求中的「部分」。 因此,在最終的request之前,您需要使用set-attachment組件。 您可以在此找到更多here

+0

謝謝,它的工作。但是,現在文件名稱與附件的密鑰名稱相同。我怎樣才能設置附件的文件名。 –

+0

抱歉延遲。我看到您保存了文件內容類型,然後將其用於附件。這是否解決了文件名問題? – afelisatti

+0

不,它沒有。所以我決定將請求中的文件名另外發送給監聽器。如果我嘗試#[message.inboundAttachments ['filedata']。dataSource.getName()],它只是返回鍵名即'filedata'。歡迎任何其他建議。 –

0

這是我做過什麼按afelisatti的建議,現在的工作:

<set-variable variableName="uploadAttachmentCT" value="#[message.inboundAttachments['filedata'].dataSource.getHeader('Content-Type')]" doc:name="Attachment Content Type" /> 
 

 
<set-variable variableName="uploadFile" value="#[message.inboundAttachments['filedata'].dataSource.content]" doc:name="File to be Uploaded" /> 
 

 
<set-attachment attachmentName="filedatax" value="#[flowVars ['uploadFile']]" contentType="#[flowVars['uploadAttachmentCT']]" /> 
 
     <set-attachment attachmentName="site" value="#[flowVars['uploadSite']]" contentType="text/plain" /> 
 
<set-attachment attachmentName="filename" value="#[flowVars['filename']]" contentType="text/plain" /> 
 
       <set-payload doc:name="Set payload as null" value="#[null]"/> 
 
     
 
     <http:request config-ref="HTTP_Request_Configuration" path="/xyz" method="POST" doc:name="Uploading_Doc"/>

+0

如果答案適合您,請將其標記爲正確答案,或者至少投票。 – DavoCoder