来自 smb 的 Camel - 组合 "delete=true" 并按文件名过滤

Camel from smb - combining "delete=true" and filtering by filename

我需要将文件从扩展名 A 转换为仅匹配特定文件名的 B,处理时应删除具有原始扩展名的文件。但是,不应删除目录中的其他文件。我正在使用 Apache Camel 2.17.2(不幸的是无法升级到更新的版本)。

我尝试将 delete=true 标志与文件过滤器结合使用,但它会删除所有文件,即使过滤器有效。

from("smb://myDirectory?delete=true&password=xxxxxx&username=zzzz"). .filter(PredicateBuilder.and(header(Exchange.FILE_NAME).startsWith("Report"), PredicateBuilder.not(header(Exchange.FILE_NAME).endsWith("zip"))))

此解决方案首先将原始文件转换为我想要的格式,不会再次转换转换后的文件 - 正如预期的那样 - 但随后它也会删除转换后的文件,因为 delete=true 标志据我所知有优先于过滤器。

我也试过将所有这些都放在路由参数中:

from("smb://myDirectory?delete=true&fileName=Report*.csv&password=xxxxxx&username=zzzz")

但是正则表达式不匹配——我不明白为什么——而且我认为即使我能让正则表达式工作,问题也可能是一样的。文件名示例为 Report_Financial_20190201.csv.

我现在唯一能想到的是 .choice().when() 条件,它会检查文件名和扩展名并转换或不转换并将其放入目标文件夹...这可能会导致无休止的循环,通常看起来像是一个糟糕的 hack。

解决该问题的建议方法是什么? 注意:由于要求限制,我不能使用临时文件夹或类似的东西。

确实可以组合这些标志。我只需要使用 include 选项而不是 filename。这个答案帮助了我: HOW: Apache Camel, Regex match files 我的端点现在看起来像这样:

from("smb://myDirectory?delete=true&include=Report.*\.csv&password=xxxxxx&username=zzzz")