用RemoteFileTemplate
从 Spring Integration 3.0 开始,在对象上提供了一个新的抽象。
该模板提供了发送、检索(作为)、删除和重命名文件的方法。
此外,还提供了一个方法,允许调用方对会话执行多个操作。
在所有情况下,模板都会可靠地关闭会话。
有关更多信息,请参阅 RemoteFileTemplate
的 Javadoc。
FTP 有一个子类: .FtpSession
InputStream
execute
FtpRemoteFileTemplate
版本 4.1 添加了其他方法,包括 ,它提供对底层的访问,从而允许您访问低级 API。getClientInstance()
FTPClient
并非所有 FTP 服务器都能正确实现该命令。
有些 API 会为不存在的路径返回 positive 结果。
当路径为文件且存在时,该命令会可靠地返回名称。
但是,这不支持检查是否存在空目录,因为当路径为目录时,总是返回空列表。
由于模板不知道路径是否代表目录,因此当路径似乎不存在时(使用 时),它必须执行其他检查。
这会增加开销,需要向服务器发出多个请求。
从版本 4.1.9 开始,该 提供了具有以下选项的属性:STAT <path>
NLST
NLST
NLST
FtpRemoteFileTemplate
FtpRemoteFileTemplate.ExistsMode
-
STAT
:执行 FTP 命令 () 检查路径是否存在。 这是默认设置,并要求 FTP 服务器正确支持该命令(带路径)。STAT
FTPClient.getStatus(path)
STAT
-
NLST
:执行 FTP 命令 — 。 如果要测试的路径是文件的完整路径,请使用此选项。 它不适用于空目录。NLST
FTPClient.listName(path)
-
NLST_AND_DIRS
:首先执行该命令,如果它没有返回任何文件,则回退到使用 临时切换工作目录的技术。 有关更多信息,请参见FtpSession.exists()
。NLST
FTPClient.changeWorkingDirectory(path)
由于我们知道情况总是只寻找一个文件(而不是一个目录),因此我们安全地对 and 组件使用 mode。FileExistsMode.FAIL
NLST
FtpMessageHandler
FtpOutboundGateway
对于任何其他情况,可以扩展 the 以在重写的方法中实现自定义逻辑。FtpRemoteFileTemplate
exist()
从版本 5.0 开始,可以使用新方法。
此方法允许在相同的线程绑定 .
当您需要执行 as one unit of work 的多个高级操作时,这非常有用。
例如,将它与命令实现一起使用,其中我们对提供的目录中的每个文件执行操作,并对其子目录递归执行操作。
有关更多信息,请参阅 Javadoc。RemoteFileOperations.invoke(OperationsCallback<F, T> action)
RemoteFileOperations
Session
RemoteFileTemplate
AbstractRemoteFileOutboundGateway
mput
put