我正在从FTP下载文件。我能够下载具有已定义模式或已定义名称的文件,然后通过Java处理这些文件。
我面临的问题是我需要每周下载一个新文件。文件名与"constant-prefix-2013-W51.zip"
类似。我目前的XML就是这样;
<ftp:inbound-endpoint
host="${ftp.host}"
port="${ftp.port}"
path="${ftp.pathInbound}"
user="${ftp.user}"
password="${ftp.password}"
responseTimeout="10000"
doc:name="KBB_FTP" >
<file:filename-wildcard-filter pattern="MyFile-2013-W51.zip"/>
</ftp:inbound-endpoint>
流程参考:Mule: How to pass File from FTP to Java class in Mule ESB?
此代码成功下载所请求的文件。但我需要在文件模式中动态添加year
和week
值。
我尝试过以下模式,但没有成功;
1. pattern="MyFile-2013-W#[server.dateTime.weekOfYear].zip"
2. pattern="MyFile-2013-W${server.dateTime.weekOfYear}.zip"
我知道第二种模式完全错误,因为它不是.properties
文件中定义的属性。我还在mule-app.properties中添加了一个像这样的属性
calendar.weekOfYear=#[server.dateTime.weekOfYear]
并使用以下模式;
3. pattern="MyFile-2013-W${calendar.weekOfYear}.zip"
这种方式都不起作用,我希望动态添加像2013
这样的年份值和像51
这样的周值,这在任何情况下都不会发生。追加到fileName的值仅在字符串模式之上,而不是任何数字..
答案 0 :(得分:1)
file:filename-wildcard-filter
不支持MEL表达式。请改用expression-filter
,如下所示:
<message-filter throwOnUnaccepted="false">
<expression-filter
expression="#[message.outboundProperties.originalFilename == 'MyFile-2013-W'+server.dateTime.weekOfYear+'.zip']" />
</message-filter>
答案 1 :(得分:0)
使用表达式过滤器#[server.dateTime.getWeekOfYear()]。zip 您可以使用此表达式并自定义时间格式。