来自 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")
我需要将文件从扩展名 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")