正在跳过Camel S3消费者中的文件夹



是否有方法跳过读取S3使用者中的文件夹?我有多个路由从一个bucket中消耗,每个路由都使用不同的前缀。这样,他们模拟从某些文件夹中读取,但最终会消耗"文件夹"本身,然后将其删除

如果没有办法避免阅读,有没有办法避免删除这些"文件夹"?

读取标头S3Constants。KEY(CamelAws3Key(跳过您的文件夹。试试这个。

from(awsUri)
.choice()
.when(header(S3Constants.KEY).isNotEqualTo("{your-folder-name}/"))

我遇到了同样的问题,当文件夹内没有对象时,camel-aws-s3组件读取文件夹本身。我使用带有CamelAws3ContentLength标头的筛选器进行了解析。如果只有文件夹,则CamelAwsS3ContentLength为0,否则将为文件大小。

在这种情况下,使用deleteAfterRead=false,并在从AWS S3接收到文件后手动删除对象,如果deleteAfter Read=true,则camel也将删除文件夹。请在下面找到代码示例

<route>
<from uri="aws-s3:bucketName?amazonS3Client=#s3Client&amp;delay=10s&amp;maxMessagesPerPoll=1&amp;deleteAfterRead=false"/>
<filter>
<simple>${headers.CamelAwsS3ContentLength} > 0</simple>
<setProperty propertyName="S3FileNameOnly"><!--get the fileName from CamelAwsS3Key header-->
<simple>${header.CamelAwsS3Key.split("/")[1]}</simple>
</setProperty>
<!--downlod the file in local location -->
<to uri="file://localfolderlocation?fileName=$simple{headers.CamelAwsS3Key}" />

<!--after downloading file delete the s3 object manually. Donot use deleteAfterRead=true -->
<to uri="aws-s3:bucketName?amazonS3Client=#s3Client&amp;operation=deleteObject"/>
</filter>
</route>

最新更新