Добавление данных метаданных в объект S3 с использованием исходящего шлюза S3 - PullRequest
0 голосов
/ 17 сентября 2018

написал код для весеннего приложения интеграции aws, которое в настоящее время загружает файлы из исходной папки в целевую корзину S3, используя s3-outbound-gateway.Хотелось бы добавить ниже определенные пользователем метаданные и их значение о файле при загрузке файла в корзину S3.

x-amz-meta-sourcePath: / test

x-amz-meta-targetPath: / targetbucket /

x-amz-meta-timestamp: (#timestamp value)

Хотелось бы узнать, как добавить метаданные, используя исходящий шлюз S3 или другим способом.Любая документация / пример / предложение будут полезны для достижения этой цели.

<util:map id="userMetadata" value-type="java.lang.String">
            <entry key="x-amz-meta-source" value="testsource" />
            <entry key="x-amz-meta-sourcePath" value="testpath" />    
            <entry key="x-amz-meta-targetPath" value="headers.TARGET_PATH" />               </util:map>

        <bean id="objectMetadata"  class="com.amazonaws.services.s3.model.ObjectMetadata">
        <property name="userMetadata" ref="userMetadata"/>
        </bean>

        <bean id="uploadMetadataProvider"  class="org.springframework.integration.aws.outbound.S3MessageHandler$UploadMetadataProvider">
        <property name="objectMetadata" ref="objectMetadata"/>
        </bean>
<int-aws:s3-outbound-gateway id="s3File"
        request-channel="filesS3GateWay"
        reply-channel="filesS3ChainChannel"
        transfer-manager="transferManager"
        bucket-expression = "headers.TARGET_PATH"
        key-expression="headers.file_name"
        upload-metadata-provider="uploadMetadataProvider"
        command="UPLOAD">
        <int-aws:request-handler-advice-chain>
            <ref bean="retryAdvice" />
        </int-aws:request-handler-advice-chain>
    </int-aws:s3-outbound-gateway>

1 Ответ

0 голосов
/ 17 сентября 2018

Я думаю, что вам нужно это:

    <xsd:attribute name="upload-metadata-provider">
        <xsd:annotation>
            <xsd:documentation>
                Reference to an instance of
                'org.springframework.integration.aws.outbound.S3MessageHandler$UploadMetadataProvider'.
            </xsd:documentation>
            <xsd:appinfo>
                <tool:annotation kind="ref">
                    <tool:expected-type
                            type="org.springframework.integration.aws.outbound.S3MessageHandler$UploadMetadataProvider"/>
                </tool:annotation>
            </xsd:appinfo>
        </xsd:annotation>
    </xsd:attribute>

Итак, вы вводите такой UploadMetadataProvider:

/**
 * The callback to populate an {@link ObjectMetadata} for upload operation.
 * The message can be used as a metadata source.
 */
public interface UploadMetadataProvider {

    void populateMetadata(ObjectMetadata metadata, Message<?> message);

}

И введите в это ObjectMetadata все, что вам нужно, основываясь на сообщении с запросом, если это так.

...