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

标签 java apache-camel camel-ftp

我需要将文件从扩展名 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() 条件,它将检查文件名和扩展名,然后将其转换或不转换并将其放入目标文件夹中...这可能会导致无限循环,并且通常看起来像是一个可怕的黑客行为。

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

最佳答案

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

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

关于java - 来自 smb 的 Camel - 组合 "delete=true"并按文件名过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54477335/

相关文章:

java - Postgresql、JDBC 和流式处理 BLOB

java - 如何使用 Jest 从 ElasticSearch 获取索引列表

java - 应用从单体服务升级到微服务

java - 如何将字节或流写入 Apache Camel FTP 以传输文件

java - 如何在JSP中显示标签消息

java - Camel 路线未在 xml 文件中解析

http - MultipartEntityBuilder 包 org.apache.http.entity.mime 不存在

apache-camel - 使用spring-ws客户端的Camel路由偶尔会抛出javax.xml.transform.stax.StAXSource异常

spring-boot - 如何在 Spring Boot 应用程序中优雅地停止 Camel 上下文

java - 如何使用 Camel 和 Java DSL 创建具有多个连接的 ftp 调用的路由?