远程文件信息

从 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 (可外部配置) 中。SftpInboundFileSynchronizingMessageSource 在轮询本地文件时会检索这些元数据。当本地文件被删除时,建议移除其元数据条目。AbstractInboundFileSynchronizer 为此目的提供了 removeRemoteFileMetadata() 回调。此外,还有一个 setMetadataStorePrefix() 用于元数据键。当这些组件共享同一个 MetadataStore 实例时,建议此前缀与基于 MetadataStoreFileListFilter 实现中使用的前缀不同,以避免因为过滤器和 AbstractInboundFileSynchronizer 都使用相同的本地文件名作为元数据条目键而导致条目被覆盖。