如何在Apache骆驼的URL中使用“移动”时重命名文件

时间:2018-10-31 07:08:54

标签: apache-camel

我有一个类似的网址 url =“ file:D:/ inputFolder?move = D:/ outputFolder”。我们正在动态制作此网址。 我想在移动时重命名文件,所以我做了这样的事情 url =“ file:D:/ inputFolder?move = D:/outputFolder&fileName=abc.txt”。但是我认为move和fileName不能一起使用,也不能重命名。

还有其他选择吗?请记住,我只想“移动”。 我也不能使用.setHeader(..)。

谢谢

2 个答案:

答案 0 :(得分:0)

嗨,

据我了解,您尝试在一个uri中移动文件。
骆驼实际上不是这样工作的。

骆驼的想法是有一个“消费者”和“生产者”,消费者在其中装载数据(例如,您的文件),生产者将数据放置在某个地方(例如,将文件保存到文件夹中)

话虽这么说,以下是使用Java路由对我有用的东西:

from("file:/home/chris/temp/camel/in")
    .to("file:/home/chris/temp/camel/out/?fileName=test.txt");

from部分配置骆驼在其中查找新文件的文件夹。一些注意事项:

  • 文件组件每0.5秒检查一次文件夹中是否有新文件。可以使用delay参数
  • 进行更改
  • 如果要移动或复制文件,则配置选项noop。默认情况下,它设置为false,这意味着它已移动

to部分中,配置文件应该移到的位置。在这里,您可以使用fileName参数来重命名文件。
不过请小心,因为直接在uri中设置选项会使它“静态”。
我的意思是,更改参数的唯一方法是完全重新配置路由或重新启动它,而您通常都不希望这样做。

注释1:
默认情况下,将所有放入一个文件夹的文件移动到同一文件将始终覆盖前一个文件。
例如,您可以使用fileExists参数始终仅附加文件的内容:fileExists=Append(有关详细信息,请参见camel file docu

注意2: 文件组件中有一个选项,可以不“移动”文件,而是复制,重命名和删除文件,当您要将其移动到其他驱动器上而无法进行简单复制时,有时这是必需的。
另请参阅有关骆驼文件组件的文档。

注意3: 您可以在同一路径中包含多个to()语句,以将文件移动到多个位置。例如:

from("file:/home/chris/temp/camel/in")
    .to("file:/home/chris/temp/camel/out/?fileName=test.txt")
    .to("smtp:....");

希望我能帮助您,并回答您的问题。
问候
克里斯

答案 1 :(得分:0)

实现目标的两种可能方法。

  1. 同时使用“消费者”和“生产者”

通过这种方式,您可以自由控制可以在何处设置目的地以及如何设置目的地,并且可以使用处理器/ bean来自由控制文件名。

    from("file:D:/inputFolder")
        .to("file:D:/outputFolder?fileName=abc.txt")
  1. 仅使用“消费者”

使用这种方式,您将您的工作视为源数据控件。当文件将在同一驱动器中移动时,可以使用此功能。缺点是文件名重命名模式受到限制(请参考camel file language

    from("file:D:/inputFolder?move=${file:parent}/../outputFolder/abc.txt")