我想将一个zip文件解压缩到一个名为zip-file的文件夹中。例如。原始/ abc.zip应解压缩为import / abc /
我现在所做的事情是解压缩指定文件夹中的文件。
from("file:" + "</path/to/original>" + "?noop=true").noAutoStartup().routeId("xxx").split(new ZipSplitter()).streaming()
.convertBodyTo(String.class).to("file:" + "</path/to/import>");
如何从“from”文件中取出文件名并将其放入“to”部分?
我是Camel的新手,所以任何帮助都会受到影响。谢谢!
答案 0 :(得分:4)
此路由将zip文件的上下文从收件箱文件夹提取到发件箱文件夹,在父文件夹中,其中父名称是提取的zip文件的名称。我认为它涵盖了您的所有要求。
fromF("file:%s?noop=true","inbox")
.split(new ZipSplitter())
.streaming()
.toD("file:{{my.outbox}}/${file:onlyname.noext}/");
一些注意事项:
对于我用过的生产者,它从一个属性获取outbox文件夹。在这里查看详细信息https://camel.apache.org/properties.html。您可以在资源文件夹中添加属性文件(maven项目的src / main / resources)并将其加载到像这样的camel中(在java dsl routebuilder中)
PropertiesComponent pc = new PropertiesComponent(); pc.setLocation("classpath:application.properties"); getContext().addComponent("properties
“,pc)
最后,最重要的是,您必须利用文件语言并使用file:onlyname:noext。获取没有扩展名的原始zip文件名。在你的情况下abc。详情请参阅:https://camel.apache.org/file-language.html
答案 1 :(得分:0)
为了将文件路径从生产者复制到消费者,可以使用file language。
像
这样的东西from("file:" + "</path/to/original>" + "?noop=true").noAutoStartup().routeId("xxx").split(new ZipSplitter()).streaming()
.convertBodyTo(String.class).to("$simple{file:path}"));
(最初回答基于文件名的过滤)
根据文件名进行过滤: - 您可以使用filter
像
这样的东西from("file:" + "</path/to/original>" + "?noop=true").noAutoStartup().routeId("xxx").fileFilter($org.apache.camel.Exchange.FILE_NAME.contains("xyz")).split(new ZipSplitter()).streaming()
.convertBodyTo(String.class).to("file:" + "</path/to/import>");
此外,camel允许在文件名中使用正则表达式。 所以你可以使用像
这样的东西from("file:" + "</path/to/original>" + "regex pattern in file name" + "?noop=true").noAutoStartup().routeId("xxx").split(new ZipSplitter()).streaming()
.convertBodyTo(String.class).to("file:" + "</path/to/import>");
答案 2 :(得分:0)
如果查看http://camel.apache.org/file2.html,您会看到camel文件组件设置了一些标题。尝试像
这样的东西from("file:" + "</path/to/original>" + "?noop=true").noAutoStartup().routeId("xxx").split(new ZipSplitter()).streaming()
.convertBodyTo(String.class).to("file:" + "</path/to/import>" + header("CamelFileNameOnly"));