我需要一些帮助。我正在尝试通过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"/>
请参阅this了解更多信息。