使用camel从FTP动态重命名文件

时间:2015-12-21 20:50:57

标签: java hadoop apache-camel hdfs

我正在尝试使用camel将一些文件从FTP路由到HDFS。我的路线一般似乎工作正常,但是只要有名称中有空格的文件,路线就会失败。它无法尝试将文件复制到HDFS。 这些文件是动态的,并且每天都在变化,因此我无法通过.setHeader执行特定的包含和更改文件名,也无法重命名FTP上的文件。

在将它们路由到HDFS之前,是否可以动态重命名具有camel名称空间的文件?

1 个答案:

答案 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");