Multipart/form-data HTTP POST 包含 Mule 中的文件和文本(Mule ESB 3.7)

Multipart/form-data HTTP POST with file and text in Mule (Mule ESB 3.7)

我有一个用于检索文件的入站 SFTP 端点,我想对文件以及屏幕截图中附加的其他数据(文本)执行 HTTP post。根据 mule 文档,有效负载必须是我使用 Set Attachment 属性 执行的出站附件。通过这种方法,我将我的一个附件的 Content-Type 设置为 application/XML(因为我的文件是 XML 类型),并将另一个参数设置为 text/plain。对实现这一目标有什么想法吗? 我附上了请求在 Postman 中的样子的截图。

假设您正在从 SFTP 入站端点接收 PDF 文件(根据文件类型更改内容类型)并且您想将该文件发送到 HTTP,那么您需要在向 HTTP 端点发送请求之前创建以下内容:

<set-attachment value="<byte-array-contents>" contentType="application/pdf" attachmentName="file" doc:name="Attachment" />

<set-attachment value="some-info" contentType="text/plain" attachmentName="metadata" doc:name="Attachment" />

此外,请确保将负载设置为 null,如下所示

<set-payload value="#[null]" />

最后,invoke/send 请求 HTTP 端点。

以下是更新的答案,适用于带有 DataWeave 2.0 的 Mule 4.2.2 EE。

只需添加一个 "set payload" 连接器,使用以下 DataWeave 脚本:

%dw 2.0
import dw::module::Multipart
output multipart/form-data
---
{
  parts: {
    part1: Multipart::field({name:"part1FieldName", value: "part 1 value", mime: "application/octet-stream"}),
    part2: Multipart::field({name:"part2FieldName", value: "part 2 value", mime: "application/json"})
  }
}

亚历克西斯