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