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

WSO2 EI调用REST API实现Postman式发送并下载文件方法

WSO2 EI 接收二进制文件下载接口配置修改方案

核心问题原因

Postman的「Send and Download」本质是不尝试对响应做文本/结构化格式解析,直接按原始二进制流完整拉取响应体;你当前配置拿到空响应,是几个配置错误导致的:

  • 调用文件下载接口时,WSO2 EI默认会用文本/结构化消息构建器解析二进制流,直接把流解析为空内容,和Postman点普通「Send」拿到空响应的逻辑一致
  • 配置中错误添加了OUT_ONLY=true属性,该属性会直接丢弃当前消息上下文里的响应体
  • VFS写入端点缺少二进制写入配置、文件名规则,默认按文本模式写入会导致文件为空或损坏
  • 空的outSequence会导致响应流在序列流转时被丢弃

必须调整的配置项

  • 在调用文件下载接口(即配置中https://efgh地址)前,新增二进制流接收相关属性,强制WSO2不做结构化解析,直接保留原始二进制流:
<!-- 强制消息按二进制流处理,不做文本/JSON/XML解析 -->
<property name="messageType" value="application/octet-stream" scope="axis2"/>
<property name="ContentType" value="application/octet-stream" scope="axis2"/>
<!-- 禁用字符编码转换,避免二进制流被转码损坏 -->
<property name="BINARY_CONTENT_HANDLING" value="binary" scope="axis2"/>
<!-- 按需关闭分块传输,适配部分不支持分块的下载接口 -->
<property name="DISABLE_CHUNKING" value="true" scope="axis2"/>
  • 删除错误属性:
    • 移除<property name="OUT_ONLY" value="true"/>,该属性会强制丢弃响应payload
    • 移除<property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"/>,该属性用于给调用方返回202状态码,本地写VFS场景不需要
  • 补全VFS端点参数,指定二进制写入模式、固定文件名,避免写入空文件:
    原VFS地址修改为带参数的形式,例如下载的文件命名为target_file(后缀可根据实际下载的文件类型自行补充):
    <address uri="vfs:file:///C:/Work?transport.vfs.FileName=target_file.bin&transport.vfs.Append=false"/>
    
    如果需要从响应头Content-Disposition中提取接口返回的原始文件名,可以在调用完下载接口后加属性提取文件名,再传给VFS。

修改完成的完整可用配置

<?xml version="1.0" encoding="UTF-8"?>
<proxy name="Proxy" startOnLoad="true" transports="http https vfs" xmlns="http://ws.apache.org/ns/synapse">
    <target>
        <inSequence>
            <call>
                <endpoint>
                    <http method="post" uri-template="https://abcd">
                    </http>
                </endpoint>
            </call>
                            
            <log>
                <property expression="get-property('axis2', 'HTTP_SC')" name="log-1"/>
             </log>
             <filter regex="200" source="get-property('axis2', 'HTTP_SC')">
                <then>
                    <!-- 新增二进制流接收配置,复现Postman Send and Download逻辑 -->
                    <property name="messageType" value="application/octet-stream" scope="axis2"/>
                    <property name="ContentType" value="application/octet-stream" scope="axis2"/>
                    <property name="BINARY_CONTENT_HANDLING" value="binary" scope="axis2"/>
                    <property name="DISABLE_CHUNKING" value="true" scope="axis2"/>

                    <call>
                        <endpoint>
                            <http method="post" uri-template="https://efgh">
                            </http>
                        </endpoint>
                    </call>
                    <log>
                        <property expression="get-property('axis2', 'HTTP_SC')" name="log-2"/>
                    </log>
                    <property name="ClientApiNonBlocking"  value="true" scope="axis2" action="remove"/>
                    
                    <!-- VFS端点补全文件名、写入配置 -->
                    <send>
                        <endpoint>
                            <address uri="vfs:file:///C:/Work?transport.vfs.FileName=downloaded_file&transport.vfs.Append=false"/>
                        </endpoint>
                    </send>
                </then>
            </filter>
        </inSequence>
        <outSequence/>
        <faultSequence/>
    </target>
</proxy>

如果下载的是特定格式文件(比如PDF、Excel),可以把messageType和ContentType的值改成对应MIME类型,VFS文件名也补上对应后缀即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:21:31