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

Mule4多部分文件上传请求报400错误,求正确请求结构

Mule4 文件上传API返回400 BadRequest问题排查与修复

问题描述

通过Mule4向要求文件键为“file”的远程API上传文件时,当前配置的Transform Message和HTTP Request请求持续返回400 BadRequest。vars.targetFile为通过File Connector读取的文件内容,需调整请求结构以解决错误。

当前配置代码

Transform Message 配置

<ee:transform doc:name="Transform Message" doc:id="55107f89-02d9-433a-b600-aa38802af6b3" >
<ee:message >
    <ee:set-payload ><![CDATA[%dw 2.0
import * from dw::core::Binaries
import dw::module::Multipart
output multipart/form-data
---
{
    "parts":{
        file:{
            "content": toBase64(vars.targetFile as String),
            "headers": {
                "Content-Type": "text/plain",
                "Content-Disposition": {
                    "name": "file",
                    subtype: "form-data",
                    filename: "document.txt"
                }
                
            }
        }
    }
}]]></ee:set-payload>
                </ee:message>
            </ee:transform>

HTTP Request 配置

<http:request method="POST" doc:name="Request Decryption" doc:id="d2be37d5-37a3-42b8-bf77-37b587c879b0" config-ref="File_Decryption_HTTP_Request_configuration" path="/api/Security/Decrypt/Hps" responseTimeout="10000">
  <http:headers ><![CDATA[#[output application/json
---
{
    "request-id": vars.requestId as String,
    "Authorization" : "Bearer " ++ (vars.tokenResponse.access_token as String),
    "Content-Type": "multipart/form-data"
}]]]>
   </http:headers>
</http:request>

问题分析与修复方案

  • 文件内容处理错误:vars.targetFile是File Connector读取的二进制文件内容,无需转成String再做Base64编码,直接传递原始二进制内容即可,否则会导致API无法解析文件格式。
  • Content-Disposition格式错误:当前嵌套对象形式的Content-Disposition不符合HTTP标准,需改为字符串格式定义。
  • 冗余请求头设置:当输出格式为multipart/form-data时,Mule会自动生成包含boundary信息的Content-Type头,手动设置会覆盖该头,导致请求格式异常,需移除手动配置的Content-Type。

修正后的配置代码

修正后的Transform Message

<ee:transform doc:name="Transform Message" doc:id="55107f89-02d9-433a-b600-aa38802af6b3" >
<ee:message >
    <ee:set-payload ><![CDATA[%dw 2.0
import * from dw::core::Binaries
import dw::module::Multipart
output multipart/form-data
---
{
    "parts":{
        file:{
            "content": vars.targetFile,
            "headers": {
                "Content-Type": "text/plain",
                "Content-Disposition": "form-data; name=\"file\"; filename=\"document.txt\""
            }
        }
    }
}]]></ee:set-payload>
                </ee:message>
            </ee:transform>

修正后的HTTP Request

<http:request method="POST" doc:name="Request Decryption" doc:id="d2be37d5-37a3-42b8-bf77-37b587c879b0" config-ref="File_Decryption_HTTP_Request_configuration" path="/api/Security/Decrypt/Hps" responseTimeout="10000">
  <http:headers ><![CDATA[#[output application/json
---
{
    "request-id": vars.requestId as String,
    "Authorization" : "Bearer " ++ (vars.tokenResponse.access_token as String)
}]]]>
   </http:headers>
</http:request>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 14:54:59