我正在尝试基于遵循以下标准的文件扩展名创建文件zip:filename。{NUMBER},我正在做的是读取文件夹,按。{number}分组,然后创建唯一文件.zip以.num结尾,例如:
file.01
file2.01
file.02
file2.02
file.01.zip,其中包含-> file.01,file2.01
file02.zip,其中包含-> file.02,file2.02
我所做的是使用outboundGateway,拆分文件,丰富读取文件扩展名的标头,然后汇总读取该标头,但似乎无法正常工作。
public IntegrationFlow integrationFlow() {
return flow
.handle(Ftp.outboundGateway(FTPServers.PC_LOCAL.getFactory(), AbstractRemoteFileOutboundGateway.Command.MGET, "payload")
.fileExistsMode(FileExistsMode.REPLACE)
.filterFunction(ftpFile -> {
int extensionIndex = ftpFile.getName().indexOf(".");
return extensionIndex != -1 && ftpFile.getName().substring(extensionIndex).matches("\\.([0-9]*)");
})
.localDirectory(new File("/tmp")))
.split() //receiving an iterator, creates a message for each file
.enrichHeaders(headerEnricherSpec -> headerEnricherSpec.headerExpression("warehouseId", "payload.getName().substring(payload.getName().indexOf('.') +1)"))
.aggregate(aggregatorSpec -> aggregatorSpec.correlationExpression("headers['warehouseId']"))
.transform(new ZipTransformer())
.log(message -> {
log.info(message.getHeaders().toString());
return message;
});
}
它给我一条包含所有文件的消息,我应该希望收到2条消息。
答案 0 :(得分:0)
由于此dsl的性质,我具有动态数量的文件,因此我无法计算以相同数字结尾的消息(文件),而且我认为超时可能不是一个很好的发布策略,我只是自己写了代码而没有写到磁盘:
self