【问题标题】:Dynamically rename files from FTP with camel使用骆驼从FTP动态重命名文件
【发布时间】:2015-12-21 20:50:56
【问题描述】:
我正在尝试使用骆驼将一些文件从 FTP 路由到 HDFS。我的路线总体上似乎运行良好,但是只要文件名中有空格,路线就会失败。尝试将文件复制到 HDFS 失败。
这些文件是动态的、自然的并且每天都在变化,所以我将无法通过 .setHeader 进行特定的包含和更改文件名,也无法重命名 FTP 上的文件。
在将它们路由到 HDFS 之前,是否可以用骆驼动态重命名其中有空格的文件?
【问题讨论】:
标签:
java
hadoop
apache-camel
hdfs
【解决方案1】:
存储在名为“CamelFileName”的消息头中的文件名,您可以使用以下内容:
from("sftp:...")
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
Message in = exchange.getIn();
String originalFilename = (String) in.getHeader(Exchange.FILE_NAME);
String modifiedFilename = originalFilename.replaceAll("\\s+", "");
in.setHeader(Exchange.FILE_NAME, modifiedFilename);
}})
.to("hdfs:...");
或更简洁地说:
from("ftp:in")
.setHeader(Exchange.FILE_NAME, header(Exchange.FILE_NAME).regexReplaceAll("\\s+", "_").getExpression())
.to("hdfs:out");