使用 Mule 4.x,我希望使用 HTTP POST 方法端点设置我的 API,该端点允许用户发布包含文件的表单数据。
然后我想获取该文件,并将其与发布的文件作为电子邮件附件一起通过电子邮件发送。
如果可能的话,这应该与文件类型无关,因为它可以是发布到 API 的任何文件类型。
我似乎无法将表单部分的“内容”转换为适合电子邮件附件的内容。
我经历了许多不同的迭代。此时此刻我所拥有的.. 当我记录有效负载时,我得到:
----------------------------344843990838395406613242
Content-Disposition: form-data; name="fileContents"; filename="upload.txt"
Content-Type: file
[{"message": "Hello World!"}]
----------------------------344843990838395406613242--
看起来不错。 我可以使用以下方法访问文件名并记录它: #[payload.parts[0].headers.'Content-Disposition'.filename]
但是每当我尝试访问时: #[payload.parts[0].content]
无论是尝试“记录”它,还是在发送电子邮件组件的附件字段中,我都会收到以下错误消息:
""Unable to find a sub type in `file, while writing Weave.
Trace: at main (Unknown)" evaluating expression: "payload.parts[0].content"."
另外,我可以使用“读取”组件将本地文件附加到电子邮件,然后使用“设置变量”将其分配给 MIME 类型为“application/binhex”的变量。然后,我似乎只需更改指向的本地文件即可将任何文件类型附加到电子邮件中。
但我不确定如何从传入的表单部分文件建立连接以附加它。
我觉得一定是我漏掉了一步。任何提示/技巧/建议/示例将不胜感激。我需要“读取”内容流并将其转换成某种东西吗?
注意:此外,我尝试使用包含文件的表单数据正文的 POST 并没有什么具体原因。这对我来说似乎最有意义,但如果有更好的发送方式,效果会更好,无论如何,请告诉我。
编辑/附加信息: 在视频中https://www.youtube.com/watch?v=5_YKXE8E7Sw 我注意到他的有效负载输出了正确的内容类型,而不仅仅是像我的那样的“文件”。我注意到的唯一区别是我使用 APIKit 作为 API 的入口点。他不是。
我仅使用标准 http 侦听器创建了一个测试项目,输出确实包含文件的实际内容类型。
也许这是 APIKit 中的一个错误?或者我是否需要专门配置一些东西以允许实际的文件输入类型正确通过?
我在 Mulesoft 论坛的某人的帮助下找到了解决方案。
我不是将文件作为表单部分数据发布,而是对文件内容进行 Base64 编码,并将其作为 http 帖子的 JSON 格式正文发送。然后使用此 json 有效负载转换为电子邮件附件以添加到电子邮件连接器。
这似乎运行得很完美。并且似乎与文件类型无关。