我可以在mule3中的组件中获得像#[header:originalFilename]这样的文件名吗

我可以在mule3中的组件中获得像#[header:originalFilename]这样的文件名吗,file,mule,File,Mule,我用 在一个文件连接器之后,再编写一个组件来处理gzip+base64内容。 如何在组件中获取文件名?您的组件实现了什么?如果不是,您想让您的组件Mule不知道吗 根据您对这些问题的回答,存在不同的选择: 使用Callable,您可以在message.getProperty中获取标题 在不实现Callable的情况下,您可以访问RequestContext来获取当前Mule事件,并从中获取消息属性。但这会让您的组件Mule意识到 否则,让组件的方法获取第二个参数(字符串originalFi

我用


在一个文件连接器之后,再编写一个组件来处理gzip+base64内容。
如何在组件中获取文件名?

您的组件实现了什么?如果不是,您想让您的组件Mule不知道吗

根据您对这些问题的回答,存在不同的选择:

  • 使用Callable,您可以在message.getProperty中获取标题
  • 在不实现Callable的情况下,您可以访问RequestContext来获取当前Mule事件,并从中获取消息属性。但这会让您的组件Mule意识到
  • 否则,让组件的方法获取第二个参数(字符串originalFilename),并使用标准表达式转换器转换包含以下内容的数组中的有效负载:#有效负载,#[头:originalFilename]。然后,该数组将作为参数传递给组件的方法

请注意,我们在Mule 3中引入了用于执行运行时注入的注释,这意味着您可以指定如何调用组件,而不需要转换器,例如

public void save(@Payload String fileContents,@InboundHeaders(“originalFilename”)String originalFilename)


请参阅:

[message.outboundproperties[originalFilename]]


使用此表达式,您可以获得组件中的原始文件名。

这是一种很好的方法。不幸的是,OP没有指定他的组件是否可以识别Mule。我建议使用transformer是为了防止他想让自己的组件不受Mule的影响,这是Mule的另一个卖点(它能够处理任何预先存在的对象)。好的一点是,我们应该将注释分解到它们自己的jar中,这样才是唯一的依赖关系。也许这对某些人来说已经太多了,或者按照Spring的方式:首先从自定义注释开始,只要标准注释合适,就切换到支持Mule自定义和标准注释的注释。我可以使用context.getMessage().getOutboundProperty(“originalFilename”)获取文件名,但现在我需要目录信息,我将“recursive”设置为true,我可以从标题或属性获取目录信息吗?或者我需要将“autoDelete”设置为false,然后访问java.io.File对象吗?不,传输不会添加目录信息。您可以使用originalFilename构建文件对象。
<gzip-compress-transformer/>
<base64-encoder-transformer/>