Apache camel 如何在使用“时重命名文件”;“移动”;apachecamel中的URL

Apache camel 如何在使用“时重命名文件”;“移动”;apachecamel中的URL,apache-camel,Apache Camel,我有一个像 url=“文件:D:/inputFolder?move=D:/outputFolder”。我们正在动态创建此url。 我想在移动时重命名文件,所以我做了如下操作 url=“文件:D:/inputFolder?move=D:/outputFolder&fileName=abc.txt”。但我认为move和fileName不能一起工作,它不是重命名 有别的办法吗?请记住我只想用“移动”。 我不能同时使用.setHeader(..) 谢谢,Hy 据我所知,您试图在一个uri中移动文件。 骆

我有一个像 url=“文件:D:/inputFolder?move=D:/outputFolder”。我们正在动态创建此url。 我想在移动时重命名文件,所以我做了如下操作 url=“文件:D:/inputFolder?move=D:/outputFolder&fileName=abc.txt”。但我认为move和fileName不能一起工作,它不是重命名

有别的办法吗?请记住我只想用“移动”。 我不能同时使用.setHeader(..)

谢谢,

Hy

据我所知,您试图在一个uri中移动文件。
骆驼不是这样工作的

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

话虽如此,以下是java路由对我的作用:

from("file:/home/chris/temp/camel/in")
    .to("file:/home/chris/temp/camel/out/?fileName=test.txt");
来自的
部分配置camel查找新文件的文件夹。请注意:

  • 文件组件每0.5秒检查一次文件夹中的新文件。这可以通过
    delay
    参数进行更改
  • 如果正在移动或复制文件,则配置选项
    noop
    。默认情况下,它被设置为
    false
    ,这意味着它已被移动
在您配置的
部分中,文件应在其中移动。在这里,您可以使用
fileName
参数重命名文件。
但是要注意这一点,因为直接在uri中设置选项会使其“静态”。
我的意思是,更改参数的唯一方法是完全重新配置路由或重新启动路由,这两种方法都不是您希望正常执行的

注1:
默认情况下,将放在一个文件夹中的所有文件移动到同一个文件中始终会覆盖上一个文件。
例如,您可以使用
fileExists
参数始终只追加文件的内容:
fileExists=append
(有关详细信息,请参阅)

注2: 文件组件中有一个选项,可以不“移动”文件,而是复制、重命名和删除文件。当您想将文件移动到另一个驱动器上,而简单的复制不起作用时,这有时是必要的。
另请参阅camel文件组件的docu以了解有关该组件的详细信息

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

from("file:/home/chris/temp/camel/in")
    .to("file:/home/chris/temp/camel/out/?fileName=test.txt")
    .to("smtp:....");
希望我能帮助您并回答您的问题。
问候

克里斯

实现目标的两种可能方法

  • 同时使用“消费者”和“生产者”
  • 使用这种方式,您可以自由地控制在何处以及如何设置目的地,并且可以通过使用处理器/bean自由地控制文件名

        from("file:D:/inputFolder")
            .to("file:D:/outputFolder?fileName=abc.txt")
    
  • 仅使用“消费者”
  • 使用这种方式,您将工作视为源数据控制。当文件要在同一驱动器内移动时,可以使用此选项。缺点是文件名重命名模式有限(请参阅)


    请提供一些代码。公共类SimpleRouteBuilder扩展RouteBuilder{@Override public void configure()引发异常{from(“文件:D:/inputFolder”)。进程(new MyProcessor();}}此文件移动。我需要类似于public void configure()的内容引发异常{from(“file:D:/inputFolder?move=D:/outputFolder&fileName=abc.txt”).process(new MyProcessor();}}}这不起作用。请编辑问题。为什么要重命名为固定文件名abc。这听起来不像是一个真实的用例。你能不能试着更好地解释一下。因为Camel中的move选项也可以支持重命名文件,但不支持使用单个硬编码名称。但是您可以尝试使用move=outputFolder/abc.txtmove=outputFolder/abc.txt创建一个名为abc.txt的文件夹,然后使用以前相同的文件名传输文件。url是根据日期动态创建的,但在处理过程中,我希望添加带有文件名的用户id,以便稍后我们可以确定谁移动了文件。因此需要重命名。谢谢,我的原始链接类似于“file://\\outputFolder\cioms\61db?move=\\outputFolder\cioms\61db\2018/10/30Oct2018\In Progress&recursive=true&readLock=changed&readLockMinAge=60s&readLockMinLength=0&delay=10000&idempotent=false&antInclude=**/In/**,\In”,在这个链接中我想添加如下属性“filename=abc.txt”。此链接是根据日期动态生成的。谢谢,我的原始链接类似于“file://\\outputFolder\cioms\61db?move=\\outputFolder\cioms\61db\2018/十月/30Oct2018\In Progress&recursive=true&readLock=changed&readLockMinAge=60s&readLockMinLength=0&delay=10000&idempotent=false&antInclude=**/In/**,\In在这个链接中,我想添加类似“filename=abc.txt”的属性。此链接基于日期动态生成。
        from("file:D:/inputFolder?move=${file:parent}/../outputFolder/abc.txt")