FTP 服务器文件在上传期间被锁定

FTP 服务器文件在上传期间被锁定

应用程序定期轮询目录以查找通过 FTP 到达的输入 csv 文件,因此该计算机上运行着一个 FTP 服务器(当前为 Filezilla 服务器)。

问题是,如果当应用程序决定轮询位置时文件正在上传,那么该文件将被锁定,并且应用程序会抛出各种难看的错误,从而破坏用户体验。

现在假设我无法修改应用程序以等待,有什么可以解决此问题的方法吗?例如,上传完成后服务器会自动移动或重命名文件吗?还是等上传完成后再保存文件?或者是否有其他服务器提供此类解决方案?

答案1

我建议使用这种方法,即应用程序不轮询其他进程(在本例中为 FTP 服务器)用于写入的位置。相反,在文件到达应用程序轮询的位置后,将进程设置为 rnfr/rnto(原子操作)文件...您应该尝试对文件进行读锁定,如果失败,则跳过它直到下一次尝试。另一种方法是使用标记文件,该文件将在文件批次中最后到达,并向您的轮询应用程序发出信号,表示它可以开始处理 csv 文件

答案2

我已经通过以下方法解决了同样的问题:

  1. 连接到 FTP
  2. 将文件列表放入数组中(过滤掉 .end 文件)
  3. 重命名数组中的每个文件(在文件名中添加 .end)
  4. 如果重命名时出错,请跳过该文件(意味着该文件仍由其他应用程序上传)
  5. 下载每个 *.end 文件并删除(或重命名为 .fin 等)

相关内容