繁体   English   中英

通过 WSO2 EI 版本 6.6 向 Rest API 发送多部分表单数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM