У меня есть случай, когда мне нужно загрузить файлы .fif с локального на удаленный сервер sftp в указанной структуре каталогов.Например:
Теперь некоторые другие серверы / приложения будут обрабатывать эти файлы .fif, генерировать файлы .npz и помещать их в выходную папку.соответствующего посещения / идентификатора.
Я могу загружать файлы, используя sftpOutboundAdapter, и он работает нормально.
Теперь я не могу понять, как добавить опрос, чтобы знать, что выходные файлы созданыв этом выходном каталоге этого посещения.Я не хочу загружать файлы в выходную папку.Я просто хочу знать, что создано 4 файла, чтобы я мог обновить статус посещения.
Код, который у меня пока есть,
@Value("${sftp.host}")
private String host;
@Value("${sftp.port:22}")
private int port;
@Value("${sftp.user}")
private String user;
@Value("${sftp.privateKey:#{null}}")
private Resource privateKey;
@Value("${sftp.privateKeyPassphrase:}")
private String privateKeyPassphrase;
@Value("${sftp.password:#{null}}")
private String password;
private final FileService fileService;
@Autowired
public SftpConfig(FileService fileService) {
this.fileService = fileService;
}
@Bean
public SessionFactory<LsEntry> sftpSessionFactory() {
DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory(true);
factory.setHost(host);
factory.setPort(port);
factory.setUser(user);
if (privateKey != null) {
factory.setPrivateKey(privateKey);
factory.setPrivateKeyPassphrase(privateKeyPassphrase);
} else {
factory.setPassword(password);
}
factory.setAllowUnknownKeys(true);
return new CachingSessionFactory<LsEntry>(factory);
}
@Bean
public IntegrationFlow sftpOutboundFlow() {
return IntegrationFlows.from("toSftpChannel")
.handle(Sftp.outboundAdapter(this.sftpSessionFactory(), FileExistsMode.FAIL)
.remoteDirectoryExpression("headers['path']")
.useTemporaryFileName(false)
.autoCreateDirectory(true)
.fileNameGenerator(message -> (String) message.getHeaders().get("fileName"))
, c -> c.advice(expressionAdvice())
).get();
}
@Bean
public Advice expressionAdvice() {
ExpressionEvaluatingRequestHandlerAdvice advice = new ExpressionEvaluatingRequestHandlerAdvice();
advice.setSuccessChannelName("integrationFlow.input");
advice.setOnSuccessExpressionString("payload");
advice.setFailureChannelName("integrationFlow.input");
advice.setOnFailureExpressionString("payload");
advice.setTrapException(true);
return advice;
}
@Bean
public IntegrationFlow integrationFlow() {
return f -> f.handle((MessageHandler) fileService::OnFilesUpload);
}
@MessagingGateway
public interface UploadGateway {
@Gateway(requestChannel = "toSftpChannel")
void upload(@Payload File file, @Header("fileName") String fileName, @Header("path") String path,
@Header("parentId") Long parentId);
}
Пожалуйста, дайте Java-конфигурацию того, какМогу ли я опросить родительский каталог, т.е. провайдеров, и узнать путь до выходной папки соответствующих посещений / идентификаторов, в которых создаются файлы .npz.а затем получите количество созданных файлов или список файлов.