RemoteFileTemplate

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

版本 4.1 添加了其他方法,包括 ,它提供对底层的访问,从而允许您访问低级 API。getClientInstance()FTPClientspring-doc.cn

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

  • STAT:执行 FTP 命令 () 检查路径是否存在。 这是默认设置,并要求 FTP 服务器正确支持该命令(带路径)。STATFTPClient.getStatus(path)STATspring-doc.cn

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

  • NLST_AND_DIRS:首先执行该命令,如果它没有返回任何文件,则回退到使用 临时切换工作目录的技术。 有关更多信息,请参见 FtpSession.exists()NLSTFTPClient.changeWorkingDirectory(path)spring-doc.cn

由于我们知道情况总是只寻找一个文件(而不是一个目录),因此我们安全地对 and 组件使用 mode。FileExistsMode.FAILNLSTFtpMessageHandlerFtpOutboundGatewayspring-doc.cn

对于任何其他情况,可以扩展 the 以在重写的方法中实现自定义逻辑。FtpRemoteFileTemplateexist()spring-doc.cn

从版本 5.0 开始,可以使用新方法。 此方法允许在相同的线程绑定 . 当您需要执行 as one unit of work 的多个高级操作时,这非常有用。 例如,将它与命令实现一起使用,其中我们对提供的目录中的每个文件执行操作,并对其子目录递归执行操作。 有关更多信息,请参阅 JavadocRemoteFileOperations.invoke(OperationsCallback<F, T> action)RemoteFileOperationsSessionRemoteFileTemplateAbstractRemoteFileOutboundGatewaymputputspring-doc.cn