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
相关产品推荐
相关产品推荐

