Spring启动SFTP,SFTP中的动态目录

Spring boot SFTP, dynamic directory in SFTP

我试图将文件上传到动态目录到 SFTP。当我上传一些文件时,第一个文件总是上传到最后一个目录。然后,rest 文件将被上传到正确的目录。当我进行调试模式时,我看到每个第一个文件都会上传到 temporaryDirectory,这是 spring 已经设置的代码。我不知道如何将此 temporaryDirectory 的值设置为正确的值。请帮我解决这个问题。 或者你们有其他方法可以上传和创建适当的动态目录。请告诉我。 这是代码:

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;
    }

您正在使用 LiteralExpression,只计算一次,您需要一个在运行时计算的表达式。

handler.setRemoteDirectoryExpressionString("'" + sftpRemoteDirectory/ + "'" + headers['dirName']);