首页 > 解决方案 > 通过 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>```



标签: wso2wso2esbmultipartform-datawso2ei

解决方案


通常,在发送文件的二进制内容时,内容将显示为 base64 编码。您可以尝试在负载工厂调解器之后定义multipart/form-data messageType属性吗?(并去掉解码相关的配置)

<property name="messageType" value="multipart/form-data" scope="axis2"/>

请参阅以获取更多信息。


推荐阅读