You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSO2 EI 6.6如何基于application/octet-stream响应创建multipart请求

WSO2 EI 6.6 基于octet-stream响应构造multipart请求的正确配置

问题根因

你遇到的空响应、二进制乱码问题,核心是两个配置错误:

  • payloadFactory中介默认会对传入的二进制内容做XML转义、Base64编码处理,直接取$body/的octet-stream内容会破坏原始二进制结构
  • 构造multipart请求前没有正确配置Axis2级别的消息类型参数,二进制内容没有被识别为表单文件附件,会被当做普通文本字段处理

分步配置方案

1. 保留上游返回的原始二进制流

在调用首个返回application/octet-stream的API之后,立刻执行以下配置,将原始二进制内容、响应头里的媒体类型存入上下文属性,避免后续中介逻辑篡改二进制内容:

<!-- 存储原始二进制载荷,禁止后续流程转码 -->
<property name="originalBinaryPayload" expression="$body" scope="default" type="OM"/>
<!-- 提取上游返回的Content-Type,后续作为文件的媒体类型 -->
<property name="upstreamContentType" expression="$trp:Content-Type" scope="default" type="STRING"/>

注意:这一步之前不要添加任何强制转换消息类型(比如转application/xml、application/json)的property配置,否则二进制流会被序列化损坏。

如果发现二进制内容仍被自动转码,需要修改EI配置文件EI_HOME/conf/axis2/axis2.xml,在<messageBuilders>节点下添加二进制透传构造器:

<messageBuilder contentType="application/octet-stream" class="org.wso2.carbon.relay.BinaryRelayBuilder"/>

添加后重启EI节点生效,该构造器会原样透传二进制内容,不会做任何编码转换。

2. 配置multipart请求全局参数

在构造请求体之前,添加Axis2范围的属性配置,指定消息类型为multipart/form-data,关闭冲突的MTOM/SwA配置:

<property name="messageType" value="multipart/form-data" scope="axis2"/>
<property name="ContentType" value="multipart/form-data" scope="axis2"/>
<property name="enableMTOM" value="false" scope="axis2"/>
<property name="enableSwA" value="false" scope="axis2"/>

3. 正确构造multipart表单请求体

使用payloadFactory构造请求时,文件字段必须添加filename、content-type属性,引用之前存储的二进制内容和媒体类型,不要直接取当前$body的内容:

<payloadFactory media-type="xml">
    <format>
        <root xmlns="http://ws.apache.org/ns/synapse">
            <!-- 文件字段,命名空间必须为form-data的官方命名空间 -->
            <file xmlns="http://org.apache.axis2/xsd/form-data"
                  filename="target_file.bin"
                  content-type="$1">$2</file>
            <!-- 其他普通表单字段可按相同命名空间追加,示例:
            <bizId xmlns="http://org.apache.axis2/xsd/form-data">123456</bizId>
            -->
        </root>
    </format>
    <args>
        <arg evaluator="xml" expression="get-property('upstreamContentType')"/>
        <arg evaluator="xml" expression="get-property('originalBinaryPayload')"/>
    </args>
</payloadFactory>

校验注意事项

  • payloadFactory配置完成后,不要添加任何消息转换类的中介逻辑,直接通过call或send中介发起请求即可
  • 调试时可添加log中介打印$axis2:messageType属性,确认值为multipart/form-data,如果显示为application/xml说明配置未生效
  • 文件名可根据业务需要自定义,content-type属性如果上游返回的是通用octet-stream,也可以替换为实际业务对应的媒体类型,比如image/png、application/pdf等

内容的提问来源于stack exchange,提问作者rahul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 20:42:18