使用Mulesoft slack Connector上传图像/pdf到slack通道



我试图使用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编码,这不是发送二进制数据的最佳用途。

我建议您使用以下两个选项之一:

  1. slack连接器社区版本:它在类似的配置下工作得很好。您不必担心请求结构,因为它将封装所有内容。此外,它使用multipart/form-data在引擎盖下,所以你不会有任何问题与PDF或PNG文件。用法非常简单,所以我不会在这里添加细节。当你拖动组件时,你就能理解它了。

  2. 使用传统的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操作的输出

最新更新