【问题标题】:Why is RemoteFileTemplate ignoring the value set in setFileNameExpression?为什么 RemoteFileTemplate 会忽略 setFileNameExpression 中设置的值?
【发布时间】:2015-04-14 13:36:29
【问题描述】:

使用 Spring-integration 4.1.1.RELEASE 将消息负载中的文件上传到远程 sFtp 共享。我正在使用这样初始化的 sFtpRemoteFileTemplate:

Expression remoteDirectoryExpression = new  LiteralExpression("si.sftp.sample");
SpelExpressionParser parser = new SpelExpressionParser();
Expression fileNameExpression = new LiteralExpression("foo.txt");

template = new SftpRemoteFileTemplate(sessionFactory);
template.setCharset("UTF-8");
template.setBeanFactory(beanFactory);
template.setAutoCreateDirectory(true);
template.setRemoteDirectoryExpression(remoteDirectoryExpression);
template.setFileNameExpression(fileNameExpression);
template.setTemporaryFileSuffix(".writing");
template.setUseTemporaryFileName(true);
template.afterPropertiesSet();

但是,我在 fileNameExpression 中放置的任何文字都将被忽略,并且上传的文件将始终被命名为与原始文件相同。结果总是和原来一样:

Expression fileNameExpression = parser.parseExpression("payload.name");

这是为什么呢?我错过了什么吗?

【问题讨论】:

    标签: java spring expression filenames spring-integration


    【解决方案1】:

    setFileNameExpression 仅用于GET 操作。

    尝试改用setFileNameGenerator。这个正好是给PUT的。

    【讨论】:

    • javadocs 有一些不足之处——我开了一个JIRA Issue
    • 知道了。我认为可以直接使用表达式来生成远程文件名。作为 xml 配置的等效项:remote-filename-generator-expression="payload.getName() + '_foo'"。感谢您的澄清。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    相关资源
    最近更新 更多