我试图使用mulesoft slack连接器将PDF文件和PNG文件上传到slack通道,但我无法正确配置设置以使此工作。有人能成功做到这一点吗?下面是我在slack上传文件连接器之前的转换消息:
%dw 2.0
output application/x-www-form-urlencoded
---
{
"channels": "C03E4FWEQRY",
"content": payload,
"filename": "AdobePremierPro2021.pdf",
"title": "AdobePremierPro2021",
"filetype": "pdf"
}
它将文件发送到通道,但所有内容都丢失。该文件是一个无法读取的二进制文件。
下面是XML代码片段:
<flow name="upload-sub-flow" doc:id="1c8a2b29-5358-41bd-acd8-760676ddd86e" >
<file:read doc:name="Read" doc:id="d4ba9476-4d83-47cd-8915-f1e8ef8e119e" config-ref="File_Config" path="/Users/aparkhe/AnypointStudio/1platform/slack-sys-api/src/main/resources/AdobePremierPro2021.pdf"/>
"] <ee:transform doc:name="Transform Message" doc:id="72c36c3b-ce68-4c5d-8a0f-961f95a71569" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/x-www-form-urlencoded
---
{
"channels": "C03E4FWEQRY",
//"thread_ts": vars.SlackTS,
"content": payload,
"filename": "AdobePremierPro2021.pdf",
//"filename": "ArrivalPass.png",
//"title": "AdobePremierPro2021",
"filetype": "pdf"
}]]></ee:set-payload>
</ee:message>
</ee:transform>
<slack:create-filesupload doc:name="Upload File" doc:id="08546a03-d746-42af-b50e-d45c11a5eb04" config-ref="Slack_Connector_Config"/>
</flow>
下面是POM依赖:
<dependency>
<groupId>com.mulesoft.connectors</groupId>
<artifactId>mule4-slack-connector</artifactId>
<version>1.0.12</version>
<classifier>mule-plugin</classifier>
</dependency>
看起来slack连接器还不够成熟,并且在二进制数据方面存在问题。Slack的file.upload
端点支持两种MIME类型:application/x-www-form-urlencoded
和其他multipart/form-data
。在检查调试日志后,看起来松弛连接器只使用application/x-www-form-urlencoded
编码,这不是发送二进制数据的最佳用途。
我建议您使用以下两个选项之一:
-
slack连接器社区版本:它在类似的配置下工作得很好。您不必担心请求结构,因为它将封装所有内容。此外,它使用
multipart/form-data
在引擎盖下,所以你不会有任何问题与PDF或PNG文件。用法非常简单,所以我不会在这里添加细节。当你拖动组件时,你就能理解它了。 -
使用传统的
http:request
连接器。这里棘手的部分是创建multipart/form-data
有效负载。但是,您可以使用Multipart dataweave模块,这将使其相当简单。您将使用Multipart::form
函数来创建表单,并使用Multipart:field
函数传递您在转换消息中设置的4个字段的数组。你的转换模块看起来像这样
%dw 2.0 import dw::module::Multipart output multipart/form-data --- Multipart::form([ Multipart::field("channels","#testing"), Multipart::field("filename","AdobePremierPro2021"), Multipart::field("filetype","pdf"), Multipart::field("file",payload, "application/pdf", "AdobePremierPro2021.pdf"), ])
这里的有效载荷将是
file:read
操作的输出