Весенняя загрузка SFTP, каталог Dynami c в SFTP - PullRequest
1 голос
/ 30 марта 2020

Я пытался загрузить файлы в каталог Dynami c в SFTP. Когда я загружал некоторые файлы, первый файл всегда загружался в последний каталог. После этого файл отдыха будет загружен в правильный каталог. Когда я сделал режим отладки, я увидел, что каждый первый файл будет загружен во временный каталог, который уже установлен весной. Я не знаю, как установить значение этой временной директории на правильное значение. Пожалуйста, помогите мне решить проблему. Или, может быть, у вас есть другой способ загрузить и создать правильный каталог Dynami c. Пожалуйста, дайте мне знать. Вот код:

private String sftpRemoteDirectory = "documents/"


 @MessagingGateway
        public interface UploadGateway {
            @Gateway(requestChannel = "toSftpChannel")
            void upload(File file, @Header("dirName") String dirName);
        }

@Bean
    @ServiceActivator(inputChannel = "toSftpChannel")
    public MessageHandler handler() {
        SftpMessageHandler handler = new SftpMessageHandler(sftpSessionFactory());
        SimpleDateFormat formatter = new SimpleDateFormat("yyMMdd");
        String newDynamicDirectory = "E" + formatter.format(new Date())+String.format("%04d",Integer.parseInt("0001") + 1);
        handler.setRemoteDirectoryExpression(new LiteralExpression(sftpRemoteDirectory + newDynamicDirectory));
        handler.setFileNameGenerator(message -> {
            String dirName = (String) message.getHeaders().get("dirName");
            handler.setRemoteDirectoryExpression(new LiteralExpression(sftpRemoteDirectory + dirName));
            handler.setAutoCreateDirectory(true);

            if (message.getPayload() instanceof File) {
                return (((File) message.getPayload()).getName());
            } else {
                throw new IllegalArgumentException("File expected as payload!");
            }
        });

        return handler;
    }

1 Ответ

0 голосов
/ 30 марта 2020

Вы используете LiteralExpression, оцененный только один раз, вам нужно выражение, которое вычисляется во время выполнения.

handler.setRemoteDirectoryExpressionString("'" + sftpRemoteDirectory/ + "'" + headers['dirName']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...