远程文件信息

从版本 5.2 开始,FtpStreamingMessageSourceFTP 流式入站通道适配器)、FtpInboundFileSynchronizingMessageSourceFTP 入站通道适配器)以及 FtpOutboundGatewayFTP 出站网关)的 "read" 命令,在生成的 message 中提供了额外的 header,包含有关远程文件的信息。

  • FileHeaders.REMOTE_HOST_PORT - 文件传输操作期间远程会话连接到的 host:port 对;

  • FileHeaders.REMOTE_DIRECTORY - 执行操作的远程目录;

  • FileHeaders.REMOTE_FILE - 远程文件名;仅适用于单个文件操作。

由于 FtpInboundFileSynchronizingMessageSource 不是基于远程文件生成 message,而是使用本地副本,因此 AbstractInboundFileSynchronizer 在同步操作期间将远程文件的信息存储在 MetadataStore(可外部配置)中,以 URI 格式存储(protocol://host:port/remoteDirectory#remoteFileName)。当本地文件被轮询时,FtpInboundFileSynchronizingMessageSource 会检索此元数据。当本地文件被删除时,建议移除其元数据条目。AbstractInboundFileSynchronizer 为此目的提供了 removeRemoteFileMetadata() 回调。此外,还有一个 setMetadataStorePrefix() 用于元数据键。建议在这些组件共享同一个 MetadataStore 实例时,将此前缀与基于 MetadataStoreFileListFilter 实现中使用的前缀区分开,以避免条目被覆盖,因为过滤器和 AbstractInboundFileSynchronizer 都使用相同的本地文件名作为元数据条目键。