У меня есть сценарий использования для передачи файлов в sftp в определенных подкаталогах, которые создаются динамически.Я получил это с помощью пользовательского метода SftpMessageHandler и шлюза.Но проблема с этим подходом заключалась в том, что он не удалял локальные временные файлы после успешной загрузки.Чтобы решить эту проблему, теперь я использую IntegrationFlow вместе с выражением Advice (как показано ниже), это удаляет локальные файлы, но я не знаю, как динамически создавать удаленные subDir.Я читал о выражении удаленного каталога, но не уверен, как его использовать / реализовать.
Кто-нибудь решил эту проблему?Любая помощь приветствуется!
@Bean
public IntegrationFlow sftpOutboundFlow() {
return IntegrationFlows.from("toSftpChannel")
.handle(Sftp.outboundAdapter(this.sftpSessionFactory())
.remoteFileSeparator("/")
.useTemporaryFileName(false)
.remoteDirectory("/temp"), c -> c.advice(expressionAdvice(c)))
.get();
}
@Bean
public Advice expressionAdvice(GenericEndpointSpec<FileTransferringMessageHandler<ChannelSftp.LsEntry>> c) {
ExpressionEvaluatingRequestHandlerAdvice advice = new ExpressionEvaluatingRequestHandlerAdvice();
advice.setOnSuccessExpressionString("payload.delete()");
advice.setOnFailureExpressionString("payload + ' failed to upload'");
advice.setTrapException(true);
return advice;
}
@MessagingGateway
public interface UploadGateway {
@Gateway(requestChannel = "toSftpChannel")
void upload(File file);
}