我们使用spring integration sftp入站通道适配器,每隔几秒轮询一次,并将zip文件下载到本地目录以进行进一步处理。当有一个大文件,其中客户端仍在上载该文件时,问题就会启动,并且此入站适配器会选择该不完整的文件。我们使用AcceptAllFileFilter进行远程过滤,对于本地我们使用自定义过滤器。
是否有更好的方法可以忽略或检查文件是否已完全上传,然后选择进行处理?
答案 0 :(得分:0)
这是(s)ftp - 获取部分文件的典型问题。
有两种常见的解决方案......
foo.zip
完成后的foo.zip.writing
)。 Spring Integration(在写作方面)使用1)(用foo.zip
写入文件并重命名为.writing
)。这是最简单的机制,因为它很容易过滤FileListFilter
文件 - Spring Integration会自动执行此操作。
2)有点困难,因为如果foo.zip
不存在,您需要编写自定义foo.done
以忽略filter
。
基础(S)FTP协议无法在不使用这些机制的情况下阻止获取部分文件。
修改强>:
如果您无法控制发件人,则可以编写自定义FileListFilter
($path = Agroindustri::find()
->where(['id_wilayah' => $idFeed])
->asArray()
->all();
),该文件只会在一段时间内未更改时才会获取文件。
这是不一个Spring Integration问题,这是使用(S)FTP的任何应用程序必须解决的问题。 Spring Integration提供了一个解决方案,以及根据您的情况解决它所需的所有钩子。