从多个HTTP响应创建多部分请求

时间:2015-12-30 12:14:49

标签: mule anypoint-studio

我必须创建一个multipart / form-data HTTP请求,其中将从一个请求接收文件,从不同请求接收一些其他表单数据值。例如:

1)HTTP侦听器将文件作为附件接收
2)将HTTP请求发送到3个或更多REST API,并将值存储到属性变量中
3)使用在步骤1中接收的文件以及在步骤2中接收的值创建HTTP请求

当我在步骤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" />
           
 	<set-variable variableName="uploadFile" value="#[message.inboundAttachments['file'].dataSource.content]" doc:name="Flow type Variable" /> 
             
.................Sending requests to other services
...................Setting property Variables    

<!--    Finally -->
		<http:request  config-ref="HTTP_poster_Configuration"  path="/handler" method="POST" doc:name="Uploading_Doc"  > 
           	 <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"/>
            	</http:request-builder>
           
        
       		</http:request>
 
         
       
    </flow>
</mule>

2 个答案:

答案 0 :(得分:0)

如果您想要的是在多部分请求中发送文件和其他数据,那么您需要将所有内容添加为附件,而不是像现在一样在流程中查询params。然后,每个附件将转换为请求中的“部分”。 因此,在最终request之前,您需要使用set-attachment组件。 您可以在此here找到更多信息。

答案 1 :(得分:0)

根据afelisatti的建议,这就是我现在所做的:

&#13;
&#13;
<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"/>
&#13;
&#13;
&#13;