如何在Mule中将文件对象写入出站端点

时间:2014-05-21 19:32:29

标签: mule

我有一个<file:inbound-endpoint>,它读取一个大文件并将其传递给java组件,该组件将大文件拆分为多个较小的文件。我将所有这些较小的文件添加到一个列表中,并将list从java组件返回到mule flow。

现在,在mule flow中,我使用<collection-splitter><foreach>将这些文件输出到<file:outbound-endpoint>

问题在于

  • 只输出一个文件(它会覆盖文件,而不是使用输出文件的原始文件名)
  • 文件内容为文件名,文件内容。

2 个答案:

答案 0 :(得分:4)

  • 您需要在file:file-to-byte-array-transformer之后和List<File>之前添加file:outbound-endpoint,以便Mule读取java.io.File的实际内容。
  • 您需要在outputPattern上定义file:outbound-endpoint,使用MEL表达式根据正在进行的消息的属性以及其他表达式构建唯一的文件名,例如时间戳或UUID,无论您的需求是什么。

答案 1 :(得分:3)

我在@David建议添加file:file-to-byte-array-transformer

对于第二部分,要获得与创建文件时分配的文件名相同的文件输出到<file:outbound-endpoint>的名称,我做了以下操作:

    <foreach>
        <set-variable variableName="fname" value="#[payload.path]"/>
        <logger level="INFO" message="fname is: #[fname]" />
        <file:file-to-byte-array-transformer />  
        <file:outbound-endpoint path="${file.csv.path}" outputPattern="#[fname]"/> 
    </foreach>

在将文件转换为字节数组之前,请在字节数组转换后获取文件名,但在#[payload]中不可用,但您仍可以从#[originalPayload]获取