使用 Apache Camel FTP 将文件内容和名称下载到列表中

Download file contents and names into a List with Apache Camel FTP

我想下载 Apache Camel 中包含名称和内容的文件列表。

目前我正在下载所有文件的文件内容作为byte[]并将它们存储在一个列表中。然后我使用 ConsumerTemplate 读取列表。 这很好用。这是我的路线:

        from(downloadUri)
            .aggregate(AggregationStrategies.flexible(byte[].class).accumulateInCollection(
                    LinkedList.class))
            .constant(true)
            .completionFromBatchConsumer()
            .to("direct:" + this.destinationObjectId);

我根据需要将所有下载文件内容的列表作为 byte[]。

我现在想扩展它,以便它下载每个文件的内容和文件名。它应存储在一对对象中:

public class NameContentPair {

    private String fileName;
    private byte[] fileContent;

    public NameContentPair(String fileName, byte[] fileContent) { ... }
}

每个下载文件的这些配对对象应依次存储在列表中。我如何更改或扩展我的路线来执行此操作?

我尝试了 Camel 转换器,但无法将它们正确构建到我的路线中。我总是把路线设置错了。

我通过实施自定义 AggregationStrategy 解决了这个问题。

它从每个 Exchange 读取文件名和文件内容,并将它们作为 NameContentPair 对象放入列表中。文件内容和文件名作为 RemoteFile 存在于 Exchange 的正文中,并从那里读取。

通用聚合实现基于 https://camel.apache.org/components/3.15.x/eips/aggregate-eip.html

中的示例实现

然后将聚合策略添加到路由中

        from(downloadUri)
            .aggregate(new FileContentWithFileNameInListAggregationStrategy())
            .constant(true)
            .completionFromBatchConsumer()
            .to("direct:" + this.destinationObjectId);