如何在使用出站网关上传文件之前检查aws s3 bucket是否可用

How to check if aws s3 bucket available before uploading file using outbound gateway

在 spring 引导应用程序中使用 aws s3 出站适配器,尝试上传 s3 存储桶中的文件。想在上传文件之前检查存储桶是否可用。如果桶不可用需要抛出错误。

对此提出建议。

<int-aws:s3-outbound-gateway id="FileChannelS3"
        request-channel="filesOutS3CChainChannel"
        reply-channel="filesArcChannel"
        transfer-manager="transferManager"
        bucket-expression="headers.TARGET_BUCKET"
                command="UPLOAD">
        <int-aws:request-handler-advice-chain>
            <ref bean="retryAdvice" />          
        </int-aws:request-handler-advice-chain>
    </int-aws:s3-outbound-gateway>

您可以配置一个 S3RemoteFileTemplate bean 并在 <filter>:

中使用它的 exists() API
<bean id="s3RemoteFileTemplate" class="org.springframework.integration.aws.support.S3RemoteFileTemplate">
    <constructor-arg ref="s3SessionFactory"/>
</bean>

<int:filter expression="@s3RemoteFileTemplate.exists(headers.TARGET_BUCKET)" throw-exception-on-rejection="true"/>

更新

Facing below exception java.lang.IllegalStateException: 'path' must in pattern [BUCKET/KEY].

抱歉,错过了您需要检查 bucket 是否存在的事实,而不是内部对象。

为此,您需要直接使用亚马逊 API:

<int:filter expression="@amazonS3.doesBucketExistV2(headers.TARGET_BUCKET)" throw-exception-on-rejection="true"/>

其中 amazonS3com.amazonaws.services.s3.AmazonS3 客户端的 bean。