有没有办法在S3消费者中跳过阅读文件夹?我有多个路由从一个桶中消费,每个路由使用不同的前缀。这样,它们模拟从某些文件夹中读取,但它们最终消费了“文件夹”本身,然后删除它。如果没有办法避免阅读,有没有办法避免删除这些“文件夹”?
vwhgwdsa1#
我有同样的问题,其中camel-aws-s3组件阅读文件夹本身时,文件夹内没有对象。我解决了使用过滤器与CamelAwsS 3ContentLength头。如果只有文件夹,那么CamelAwsS 3ContentLength是0,否则将是文件大小。在这种情况下,使用deleteAfterRead=false并在从AWS S3接收到文件后手动删除对象,如果deleteAfterRead=true,则camel也将删除文件夹。请查看下面的代码示例
<route> <from uri="aws-s3:bucketName?amazonS3Client=#s3Client&delay=10s&maxMessagesPerPoll=1&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&operation=deleteObject"/> </filter> </route>
3bygqnnd2#
阅读标题S3Constants.KEY(CamelAwsS3Key)跳过您的文件夹。
from(awsUri) .choice() .when(header(S3Constants.KEY).isNotEqualTo("{your-folder-name}/"))
2条答案
按热度按时间vwhgwdsa1#
我有同样的问题,其中camel-aws-s3组件阅读文件夹本身时,文件夹内没有对象。我解决了使用过滤器与CamelAwsS 3ContentLength头。如果只有文件夹,那么CamelAwsS 3ContentLength是0,否则将是文件大小。
在这种情况下,使用deleteAfterRead=false并在从AWS S3接收到文件后手动删除对象,如果deleteAfterRead=true,则camel也将删除文件夹。请查看下面的代码示例
3bygqnnd2#
阅读标题S3Constants.KEY(CamelAwsS3Key)跳过您的文件夹。