如何在使用出站网关上传文件之前检查AWS S3存储桶是否可用

时间:2018-08-15 22:01:16

标签: java spring amazon-s3 spring-integration spring-integration-aws

在Spring Boot应用程序中使用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>

1 个答案:

答案 0 :(得分:1)

您可以配置S3RemoteFileTemplate bean并在exists()中使用其<filter> 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"/>

更新

  

面对异常java.lang.IllegalStateException: 'path' must in pattern [BUCKET/KEY]

对不起,您错过了需要检查bucket而不是内部对象的事实。

为此,您需要直接使用Amazon API:

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

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