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

版本 4.1 添加了其他方法,包括 ,它提供对基础的访问,从而允许您访问低级别 API。getClientInstance()FTPClientSpring中文文档

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

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

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

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

由于我们知道情况总是只查找文件(而不是目录),因此我们安全地对 and 组件使用模式。FileExistsMode.FAILNLSTFtpMessageHandlerFtpOutboundGatewaySpring中文文档

对于任何其他情况,可以扩展以在重写方法中实现自定义逻辑。FtpRemoteFileTemplateexist()Spring中文文档

从版本 5.0 开始,新方法可用。 此方法允许在相同的线程边界 . 当您需要将作为一个工作单元执行多个高级操作时,这很有用。 例如,将其与命令实现一起使用,在命令实现中,我们对所提供目录中的每个文件执行操作,并对其子目录递归执行操作。 有关更多信息,请参见 JavadocRemoteFileOperations.invoke(OperationsCallback<F, T> action)RemoteFileOperationsSessionRemoteFileTemplateAbstractRemoteFileOutboundGatewaymputputSpring中文文档