Как сохранить исходные имена файлов в заархивированном файле при использовании zipAggregationStrategy - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть маршрут, структурированный следующим образом:

Файлы в b2bmbFileSystem: //com.abc/sftp/abc/Aggregated001 именуются последовательно как: 123.dat, 456.dat, 789.dat. Внутри zip-файла эти имена файлов переименовываются в идентификаторы компьютеров. Есть ли способ сохранить имена файлов?

<routes xmlns="http://camel.apache.org/schema/spring">
<route id="com.abc.zipFile001" autoStartup="false">
    <from uri="b2bmbFileSystem://com.abc/sftp/abc/Aggregated001"/>
    <convertBodyTo type="java.lang.String"/>
    <choice id="textZipFile">
        <when>
            <simple>$simple{header.CamelFileName} regex '^.*(dat|DAT)$'</simple>
            <aggregate strategyRef="zipAggregationStrategy" completionFromBatchConsumer="true" eagerCheckCompletion="true">
                <correlationExpression>
                    <constant>true</constant>
                </correlationExpression>
                <setHeader headerName="CamelFileName">
                <simple>${date:now:yyyy-MM-dd-HH-mm-ssSSS}-ZIPFILES.zip</simple>
                </setHeader>
                <to uri="b2bmbFileSystem://com.abc/sftp/abc/shipmentRequestAggregatedPGH"/>
            </aggregate>
        </when>
    </choice>
</route>
</routes>

1 Ответ

1 голос
/ 02 ноября 2019

См. ZipAggregationStrategy опция конструктора useFilenameHeader.

С Javadoc :

useFilenameHeader - если true, заголовок имени файла будет использоваться для имениагрегированные массивы байтов в ZIP-файле.

В конфигурации Spring XML вы можете определить свой компонент zipAggregationStrategy следующим образом:

<bean id="zipAggregationStrategy" class="org.apache.camel.processor.aggregate.zipfile.ZipAggregationStrategy">
    <constructor-arg index="0" value="false"/> <!-- preserveFolderStructure -->
    <constructor-arg index="1" value="true"/> <!-- useFilenameHeader -->
</bean>
...