此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Integration 6.5.1spring-doc.cadn.net.cn

RemoteFileTemplate

从 Spring Integration 3.0 开始,在FtpSession对象。 该模板提供了发送、检索的方法(作为InputStream)、删除和重命名文件。 此外,一个execute方法允许调用者在会话上执行多个作。 在所有情况下,模板都会负责可靠地关闭会话。 有关更多信息,请参阅Javadoc 的RemoteFileTemplate. FTP 有一个子类:FtpRemoteFileTemplate.spring-doc.cadn.net.cn

4.1 版添加了其他方法,包括getClientInstance(),提供对基础FTPClient从而使您可以访问低级 API。spring-doc.cadn.net.cn

并非所有 FTP 服务器都正确实现STAT <path>命令。 有些路径返回不存在的路径的正结果。 这NLST当路径是文件并且它存在时,命令会可靠地返回名称。 但是,这不支持检查空目录是否存在,因为NLST当路径为目录时,始终返回一个空列表。 由于模板不知道路径是否代表目录,因此当路径似乎不存在时,它必须执行额外的检查(当使用NLST). 这增加了开销,需要向服务器发出多个请求。 从 4.1.9 版开始,FtpRemoteFileTemplate提供FtpRemoteFileTemplate.ExistsMode属性,其中包含以下选项:spring-doc.cadn.net.cn

  • STAT:执行STATFTP 命令 (FTPClient.getStatus(path)) 检查路径是否存在。 这是默认设置,要求您的 FTP 服务器正确支持STAT命令(带有路径)。spring-doc.cadn.net.cn

  • NLST:执行NLSTFTP 命令 —FTPClient.listName(path). 如果要测试文件的完整路径,请使用此选项。 它不适用于空目录。spring-doc.cadn.net.cn

  • NLST_AND_DIRS:执行NLST命令,如果它没有返回任何文件,则回退到一种技术,该技术通过使用FTPClient.changeWorkingDirectory(path). 看FtpSession.exists()了解更多信息。spring-doc.cadn.net.cn

由于我们知道FileExistsMode.FAILcase 总是只查找文件(而不是目录),我们安全地使用NLST模式的FtpMessageHandlerFtpOutboundGateway组件。spring-doc.cadn.net.cn

对于任何其他情况,请FtpRemoteFileTemplate可以扩展以在被覆盖的exist()方法。spring-doc.cadn.net.cn

从 5.0 版开始,新的RemoteFileOperations.invoke(OperationsCallback<F, T> action)方法可用。 此方法允许多个RemoteFileOperations调用在相同的、线程边界的范围内调用,Session. 当您需要执行RemoteFileTemplate作为一个工作单元。 例如AbstractRemoteFileOutboundGateway将其与mput命令实现,其中我们执行put对所提供目录中的每个文件进行作,并递归地对其子目录进行作。 有关更多信息,请参阅 Javadocspring-doc.cadn.net.cn

从 6.5 版开始,AbstractRemoteFileOutboundGateway支持动态分辨率FileExistsMode在运行时通过 SpEL 表达式。 这允许您根据消息内容或其他条件确定文件已存在时要执行的作。spring-doc.cadn.net.cn

要使用此功能,请配置fileExistsModeExpression网关上的属性。 表达式的计算结果可以为:spring-doc.cadn.net.cn

如果表达式返回null,默认值fileExistsMode将使用网关上配置的。spring-doc.cadn.net.cn

有关更多信息,请参阅 Javadocspring-doc.cadn.net.cn

使用时FileExistsMode.APPEND,临时文件名功能将自动禁用,而不管useTemporaryFileName设置。 这是因为追加到临时文件,然后重命名它不会实现预期的追加行为。spring-doc.cadn.net.cn