1

在 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>
4

1 回答 1

1

您可以配置一个S3RemoteFileTemplatebean 并在以下位置使用它的exists()API <filter>

<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"/>

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

于 2018-08-16T00:45:07.320 回答