【问题标题】:Apache Camel set file extensionApache Camel 设置文件扩展名
【发布时间】:2015-05-07 10:39:25
【问题描述】:

我从 HTTP POST 正文获取 xml 列表,然后尝试将其保存为文件系统上的 XML 文档。不幸的是,Camel 不会自动提供文件扩展名,并且没有它会保存文件,所以我无法在我的 XML 查看器中打开它。此外,我想保留自动生成的文件名(如 ID-my_PC_name-some_strange_numbers)以避免文件覆盖或数据丢失。阅读有关骆驼简单语言的文章后,仍然没有运气。任何帮助表示赞赏。这是我的配置:

.from("jetty:http://localhost:4422/input")
      .to("direct:fileCopy");

 .from("direct:fileCopy")
       //here I want to set file extension to .xml
       .to("file:D:/inprogress")
       .log("Incoming file saved to Inprogress directory");

【问题讨论】:

    标签: apache-camel


    【解决方案1】:

    您可以使用选项filename 来设置您要生成的文件的模式。

    .from("direct:fileCopy")
           .to("file:D:/inprogress?filename=mydata-${date:now:yyyyMMdd}.xml
    ")
    

    会生成一个文件mydata-20150303.xml

    如果您想使用消息 id,这是您可以在交换中使用的唯一 id

    .from("direct:fileCopy")
               .to("file:D:/inprogress?filename=mydata-${id}.xml
        ") 
    

    会生成一个文件mydata-SOME_RANDOM_ALPHANUMERIC_ID.xml

    Apache Camel File Copy

    【讨论】:

    • 不幸的是,这个解决方案不能防止文件相互覆盖,因为文件名不是唯一的。
    • 但是你可以使用一个独特的模式,例如在模式中包含最多毫秒,你应该很高兴,不是吗?
    • 我希望你明白这种方法是不可靠的——如果我同时有 2 条消息怎么办?其中一个将丢失..
    • 文件名选项支持多种方式,因此如果您想要生成的 id 的扩展名,则设置 filename=${id}.txt - 其中 .txt 是本示例中的文件扩展名。文件名基于简单语言:camel.apache.org/simple
    • 您可以在名称中使用 id 变量来使用消息 id,这将是唯一的。像 .to("file:D:/inprogress?filename=mydata-${id}.xml 之类的东西。@ClausIbsen 刚刚看到你也提到了同样的方法。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多