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

时间:2015-06-22 17:26:03

标签: apache-camel

我尝试使用当前文件名设置标题“CamelAwsS3Key”,然后将文件上传到Amazon S3,但我无法获取当前文件名,这里是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                     ] 

但标题未设置...来自日志:

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

如果我使用常量(文件被上传),它可以工作,如:

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

如何使用当前文件名设置标头?

谢谢!

1 个答案:

答案 0 :(得分:1)

简单<simple>${file:onlyname}</simple>仅在您从文件端点使用时,例如从文件。

文件生成器(例如,文件)只有一个标题,即生成文件名:

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

欢迎您在http://camel.apache.org/support

上记录此类ENH请求