首页 文章

spring integration sftp入站通道适配器和临时文件问题

提问于
浏览
0

我们使用spring integration sftp入站通道适配器,每隔几秒轮询一次,并将zip文件下载到本地目录进行进一步处理 . 当有一个大文件,其中客户端仍在上载该文件时,问题就会启动,并且此入站适配器会选择该不完整的文件 . 我们使用AcceptAllFileFilter进行远程过滤,对于本地我们使用自定义过滤器 .

是否有更好的方法可以忽略或检查文件是否已完全上传,然后选择进行处理?

1 回答

  • 0

    这是(s)ftp - 获取部分文件的典型问题 .

    有两种常见的解决方案......

    • 使用其他名称编写文件,然后重命名 .

    • 添加特殊文件(例如 foo.zip 完成时为 foo.done ) .

    Spring Integration(在写入方面)使用1)(用 foo.zip.writing 写入文件并重命名为 foo.zip ) . 这是最简单的机制,因为它很容易过滤 .writing 文件 - Spring Integration会自动执行此操作 .

    2)有点困难,因为如果 foo.done 不存在,你需要编写一个自定义 FileListFilter 来忽略 foo.zip .

    底层(S)FTP协议无法在不使用这些机制的情况下阻止获取部分文件 .

    EDIT

    如果您无法控制发件人,则可以编写自定义 filterFileListFilter ),该文件只会在一段时间内未更改时才会获取文件 .

    这是一个Spring Integration问题,对于使用(S)FTP的任何应用程序来说,这是一个必须解决的问题 . Spring Integration提供了一个解决方案,以及根据您的情况解决它的所有钩子 .

相关问题