我正在尝试使用camel将一些文件从FTP路由到HDFS。我的路线一般似乎工作正常,但是只要有名称中有空格的文件,路线就会失败。它无法尝试将文件复制到HDFS。 这些文件是动态的,并且每天都在变化,因此我无法通过.setHeader执行特定的包含和更改文件名,也无法重命名FTP上的文件。
在将它们路由到HDFS之前,是否可以动态重命名具有camel名称空间的文件?
答案 0 :(得分:0)
文件名存储在名为" 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");