Apache camel ApacheCamel文件组件递归和临时文件名

Apache camel ApacheCamel文件组件递归和临时文件名,apache-camel,Apache Camel,我有以下问题: 我想使用ftp组件读取和写入文件以及相对于ftp用户主目录的路径。为此,我在spring中使用recursive=true,它工作得很好。问题是,我还需要使用tempFileName,但在目标位置*tmp中,创建为${file:onlyname.noext}.tmp的文件不能存储在目标目录中,而是存储在主目录中,即。 当来源为: A |-> B |-> C |->file.txt 目标应该是: A |->file.tmp (temporary)

我有以下问题: 我想使用ftp组件读取和写入文件以及相对于ftp用户主目录的路径。为此,我在spring中使用recursive=true,它工作得很好。问题是,我还需要使用tempFileName,但在目标位置*tmp中,创建为${file:onlyname.noext}.tmp的文件不能存储在目标目录中,而是存储在主目录中,即。 当来源为:

A
|-> B
|-> C
    |->file.txt
目标应该是:

A
|->file.tmp (temporary)
|-> C
    |->file.txt (file.tmp cannot be stored here!)

然而,tempFileName似乎只是相对于完整路径工作。这可以改变吗?

您今天不能这样做,但我们有一个改进,您可以在骆驼2.18.2以后的版本中这样做。然后可以使用
。/${file:onlyname.noext}.tmp
作为临时文件名


这是登录到ticket:

的,因为.tmp后缀不是必需的,我建议查看tempPrefix选项

<to uri="file:///C?tempPrefix="../" />

尝试设置
tempFileName=../${file:onlyname.noext}
。并查看文件语言的更多详细信息:Hi Claus。谢谢你的回答。这确实是我做的第一件事,但它不起作用。文件语言工作正常,但问题是“/”始终是相对于文件全名的,即包括其路径作为递归设置为true。例如,如果递归文件名为'a/file.txt',那么您的尝试会给出tempFileName='a/./file',这会给出一个错误。是的,但坦率地说,将temp文件存储在另一个文件夹中是垃圾。使用.tmp前缀保存文件,完成后重命名。我完全同意您的观点,但事实是,使用camel放置的文件的应用程序无法区分后缀,并且会消耗所有内容。这是垃圾,但无法改变。到目前为止,我用骆驼来处理这些垃圾,但这次可能太多垃圾了。无论如何,谢谢你的帮助。我记录了一张罚单,因为这方面还有改进的余地。。路径: