远程文件信息
从 5.2 版本开始,SftpStreamingMessageSource
(SFTP 流式传入通道适配器)、SftpInboundFileSynchronizingMessageSource
(SFTP 传入通道适配器) 和 SftpOutboundGateway
(SFTP 外发网关) 的 "读取" 命令在消息中提供了额外的标头,以提供有关远程文件的信息:
-
FileHeaders.REMOTE_HOST_PORT
- 远程会话在文件传输操作期间连接到的主机:端口对; -
FileHeaders.REMOTE_DIRECTORY
- 操作执行的远程目录; -
FileHeaders.REMOTE_FILE
- 远程文件名;仅适用于单个文件操作。
由于 SftpInboundFileSynchronizingMessageSource
不会针对远程文件生成消息,而是使用本地副本,因此 AbstractInboundFileSynchronizer
在同步操作期间以 URI 样式 (protocol://host:port/remoteDirectory#remoteFileName
) 将有关远程文件的信息存储在 MetadataStore
(可以外部配置)中。当轮询本地文件时,此元数据由 SftpInboundFileSynchronizingMessageSource
检索。当本地文件被删除时,建议删除其元数据条目。AbstractInboundFileSynchronizer
提供了 removeRemoteFileMetadata()
回调函数用于此目的。此外,还有一个 setMetadataStorePrefix()
可用于元数据键。建议该前缀与 MetadataStore
基础的 FileListFilter
实现所使用的前缀不同,当相同的 MetadataStore
实例在这两个组件之间共享时,以避免条目覆盖,因为过滤器和 AbstractInboundFileSynchronizer
都使用相同的本地文件名作为元数据条目键。