[英]Sending multipart form data by WSO2 EI version 6.6 to a Rest API
我需要一些帮助。 我正在尝试通过 WSO2 EI(版本 6.6)将多部分表单数据发送到 rest 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"/>
请参阅此以获取更多信息。
我遇到了类似的问题。 在将文件发送到端点之前在中介中设置以下属性,解决了我的问题。
<property name="DECODE_MULTIPART_DATA" value="true" scope="axis2" type="BOOLEAN" />
该属性将删除 EI 对多部分文件执行的 base64 编码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.