wso2 - 通过 WSO2 EI 6.6 版将多部分表单数据发送到 Rest API
问题描述
我需要一些帮助。我正在尝试通过 WSO2 EI(版本 6.6)将多部分表单数据发送到休息 API。我正在关注这个https://docs.wso2.com/display/EI660/PayloadFactory+Mediator#PayloadFactoryMediator-Example6:UploadingafiletoanHTTPendpointviaamultipartrequest
它向 API 发送一个文件,结果是成功消息,但是文件已损坏,我们无法打开它。我曾尝试发送具有相同问题的 PDF 和 PNG。当我用 notepad++ 打开损坏的 pdf 文件时,我可以在其中看到 base 64 代码。因此,我尝试在使用base64Decode(字符串编码值)将字符串发送到 API 之前对其进行解码,但 PDF 仍然损坏。对此有什么建议吗?我曾经使用 ESB 5.0.0,但由于缺少边界问题,该版本无法发送多部分,所以我不得不升级到更新的版本。我可能会在这里错过一些东西,你能帮帮我吗?提前致谢。
我的配置在这里:
<target>
<inSequence>
<enrich>
<source clone="true" type="body"/>
<target property="originalBody" type="property"/>
</enrich>
<property name="messageType" scope="axis2" type="STRING" value="multipart/form-data"/>
<property expression="fn:base64Decode(get-property('originalBody'))" name="content" scope="default" type="STRING"/>
<payloadFactory media-type="xml">
<format>
<root xmlns="">
<ModuleReference>DD</ModuleReference>
<FormattedAccount>002.2020.00160735.001</FormattedAccount>
<ExternalDocumentType>$1</ExternalDocumentType>
<Description>$2</Description>
<FileUpload xmlns="http://org.apache.axis2/xsd/form-data" filename="$3">$4</FileUpload>
<Filename>$5</Filename>
</root>
</format>
<args>
<arg value="1"/>
<arg value="test4"/>
<arg evaluator="xml" expression="$trp:FILE_NAME"/>
<arg evaluator="xml" expression="$ctx:content"/>
<arg value="test4.pdf"/>
</args>
</payloadFactory>
<header name="Authorization" scope="transport" value="Bearer ****"/>
<call blocking="true">
<endpoint>
<http method="POST" uri-template="http://XXXXX:XX/api/api/v2/recordmanagement/attachments"/>
</endpoint>
</call>
<property xmlns:ns="http://org.apache.synapse/xsd" expression="$axis2:HTTP_SC" name="Status2"/>
</inSequence>
</target>
<parameter name="transport.PollInterval">5</parameter>
<parameter name="transport.vfs.FileURI">file:///C:/WSO2/test/</parameter>
<parameter name="transport.vfs.ContentType">application/octet-stream</parameter>
<parameter name="transport.vfs.ActionAfterProcess">DELETE</parameter>
<parameter name="transport.vfs.FileNamePattern">.*\..*</parameter>
<description/>
</proxy>```
解决方案
通常,在发送文件的二进制内容时,内容将显示为 base64 编码。您可以尝试在负载工厂调解器之后定义multipart/form-data messageType属性吗?(并去掉解码相关的配置)
<property name="messageType" value="multipart/form-data" scope="axis2"/>
请参阅此以获取更多信息。