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

Multipart请求转JSON入SQS遇问题,是否用Base64编码保存数据?

问题与解决方案

问题描述

收到如下格式的multipart请求:

----------------------------778704367722595657997650
Content-Disposition: form-data; name="data"
Content-Type: application/json

[
    {    
        "subject": "test
    }
]
----------------------------778704367722595657997650
Content-Disposition: form-data; name="files"; filename="logo.jpeg"
Content-Type: image/jpeg

jpegdata
----------------------------778704367722595657997650
Content-Disposition: form-data; name="files"; filename="icon.png"
Content-Type: image/png

pngdata
----------------------------778704367722595657997650--

需要将该负载发送至SQS队列,适配AWS连接器的示例转换代码如下:

%dw 2.0
output application/java
---
{
    delaySeconds: 120,
    body: write(payload, 'application/json'),
    messageAttributes: {
        "objectType": {
            "stringValue": "cases",
            "dataType": "String"
        } as Object {
            class: "org.mule.extension.sqs.api.model.MessageAttributeValue"
        }
    } as Object {
        class: "java.util.HashMap"
    }
} as Object {
        class: "org.mule.extension.sqs.api.model.Message"
}

但直接将multipart转换为JSON会损坏二进制数据(比如image/jpeg转JSON后无法正确反序列化)。需求是提取请求中的每个文件,在下游应用重建multipart请求,疑问是:将multipart数据Base64编码,重建时解码以保留原始数据是否为正确解决方案?

解决方案

是,Base64编码是可行且常用的解决方案,具体实现逻辑如下:

  1. 上游编码处理

    • 在Mule中解析multipart请求,分离出dataJSON部分和每个files文件部分
    • 对每个文件的二进制内容执行Base64编码,同时保留文件的核心元数据:文件名、Content-Type、表单字段名(files)
    • 将data的原始JSON内容和所有文件的「元数据+Base64编码内容」组合成一个结构化JSON对象,作为SQS的消息体

    核心DW处理示例:

    %dw 2.0
    output application/json
    ---
    {
        data: payload.data,
        files: payload.files map ((file) -> {
            filename: file.attribute('filename'),
            contentType: file.attribute('Content-Type'),
            fieldName: file.attribute('name'),
            content: toBase64(file.content)
        })
    }
    
  2. 下游重建请求

    • 从SQS接收消息后,解析JSON结构还原data和文件列表
    • 对每个文件的Base64编码内容进行解码,恢复原始二进制数据
    • 根据保存的元数据(文件名、Content-Type、字段名),重新构建multipart/form-data的对应部分
    • 组合data部分和重建的文件部分,生成与原始请求一致的multipart请求

这种方式既满足了SQS对消息体为文本/JSON格式的要求,又能完整保留原始文件的二进制信息,确保下游系统可以准确重建请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:15:41