使用 Camel 设置一些 header 为当前文件名

Setting some header with current file name with Camel

我试图在将文件上传到 Amazon S3 之前使用当前文件名设置 header、"CamelAwsS3Key",但我无法获取当前文件名,此处是 Spring 片段:

...
<to uri="file:D:/camel_out?fileName=foo_$simple{date:now:yyyyMMddHHmmss}.xml" />
<setHeader headerName="CamelAwsS3Key">
    <simple>${file:onlyname}</simple>
</setHeader>
<to uri="aws-s3://bucket?accessKey=xxx&amp;secretKey=yyy" />

这是消息历史记录(我删除了无用的列):

...
[to2       ] [file:D:/camel_out?fileName=foo_$simple{date:now:yyyyMMddHHmmss}.xml]  
[setHeader1] [setHeader[CamelAwsS3Key]                                           ]  
[to3       ] [aws-s3://bucket?accessKey=xxx&secretKey=xxxxxx                     ] 

但是 header 没有设置...来自日志:

Exchange[
    ...
    Headers{... CamelAwsS3Key=null, CamelFileName=null, CamelFileNameProduced=D:\camel_out\foo_20150622124308.xml ...}
    ...
]

如果我改用常量(文件已上传),它会起作用,例如:

<setHeader headerName="CamelAwsS3Key">
    <constant>test</constant>
</setHeader>

如何设置一个header为当前文件名?

谢谢!

简单的 <simple>${file:onlyname}</simple> 仅当您从文件端点消费时,例如从文件。

To file producer(eg to file)只有一个header是produced的文件名:

这也是您可以从日志中看到的内容。如果您只需要,您将需要编写一些代码来仅提取名为 produced 的文件的名称部分,因为该名称当前包含路径。尽管我们可以在 camel 文件生成器中引入 FILE_ONLYNAME_PRODUCED header。

欢迎您在以下位置记录此类 ENH 请求:http://camel.apache.org/support