正在跳过Camel S3 Consumer中的文件夹

yzckvree  于 2022-11-07  发布在  Apache
关注(0)|答案(2)|浏览(130)

有没有办法在S3消费者中跳过阅读文件夹?我有多个路由从一个桶中消费,每个路由使用不同的前缀。这样,它们模拟从某些文件夹中读取,但它们最终消费了“文件夹”本身,然后删除它。
如果没有办法避免阅读,有没有办法避免删除这些“文件夹”?

vwhgwdsa

vwhgwdsa1#

我有同样的问题,其中camel-aws-s3组件阅读文件夹本身时,文件夹内没有对象。我解决了使用过滤器与CamelAwsS 3ContentLength头。如果只有文件夹,那么CamelAwsS 3ContentLength是0,否则将是文件大小。
在这种情况下,使用deleteAfterRead=false并在从AWS S3接收到文件后手动删除对象,如果deleteAfterRead=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>
3bygqnnd

3bygqnnd2#

阅读标题S3Constants.KEY(CamelAwsS3Key)跳过您的文件夹。

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

相关问题