从多个 HTTP 响应创建一个多部分请求
Create a Multipart Request from multiple HTTP responses
我必须创建一个 multipart/form-data HTTP 请求,其中将从一个请求接收文件,从不同的请求接收一些额外的表单数据值。示例:
1) HTTP 侦听器接收文件作为附件
2) 向 3 个或更多 REST API 发送 HTTP 请求,并将值存储到 属性 变量中
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>
如果您想要在多部分请求中发送文件和其他数据,那么您需要将所有内容添加为附件,而不是像现在在流程中那样查询参数。然后每个附件将转换为请求中的 "part"。
所以在最后的 request
之前你需要使用 set-attachment
组件。
您可以在 here.
上找到更多信息
这是我根据 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"/>
我必须创建一个 multipart/form-data HTTP 请求,其中将从一个请求接收文件,从不同的请求接收一些额外的表单数据值。示例:
1) HTTP 侦听器接收文件作为附件
2) 向 3 个或更多 REST API 发送 HTTP 请求,并将值存储到 属性 变量中
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>
如果您想要在多部分请求中发送文件和其他数据,那么您需要将所有内容添加为附件,而不是像现在在流程中那样查询参数。然后每个附件将转换为请求中的 "part"。
所以在最后的 request
之前你需要使用 set-attachment
组件。
您可以在 here.
这是我根据 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"/>