如何使用 sftp:content 从内存中写入 sftp 消息

问题描述

我正在尝试使用 sftp:write 和 sftp:content 从内存创建一个 sftp 文件。我的数据编织代码是:

<sftp:write doc:name="sftp from memory" doc:id="01bee2a1-69ad-4194-8ec8-c12852521e87" config-ref="SFTP_Config" path="#[vars.sftpFileName]" createParentDirectories="false">
    <sftp:content><![CDATA[%dw 2.0
        output application/csv
        ---
        payload.toplevel.secondlevel.bottomlevel[0],payload.more.andmore.andstillmore[0]
        ]]>
    </sftp:content>
</sftp:write>

它确实在正确的目录中创建了一个文件,但内容不是有效负载值。相反,它是实际的 dataweave 代码文件内容为:

%dw 2.0
output application/csv
---
payload.toplevel.secondlevel.bottomlevel[0]
payload.more.andmore.andstillmore[0]

我使用的是 Mule Server 4.2.2 版和 SFTP 组件 1.3.2 版。

解决方法

您实际上不是在传递 dataweave,而是在传递一个字符串。当您要使用 dataweave 时,请按字段上的 fx 按钮。 XML 将如下所示。注意到额外的 #[ 了吗?这表明这是dataweave。您的 dataweave 也无效;您必须输出一个对象或一组对象;为了使您的输出成为一个对象,您将它包装在 { .. } 中,就像 JSON 一样,并使用键值对。将其输出到 CSV 时,除非您在输出行中包含 header=false,否则这些键将用作标题行:https://docs.mulesoft.com/mule-runtime/4.3/dataweave-formats-csv#writer_properties

<sftp:write doc:name="sftp from memory" doc:id="01bee2a1-69ad-4194-8ec8-c12852521e87" config-ref="SFTP_Config" path="#[vars.sftpFileName]" createParentDirectories="false">
    <sftp:content><![CDATA[#[%dw 2.0
        output application/csv
        ---
        {
            someKeyName: payload.toplevel.secondlevel.bottomlevel[0],someOtherKeyName: payload.more.andmore.andstillmore[0]
        }]]]>
    </sftp:content>
</sftp:write>