python - Proftpd 验证上传完成

标签 python ftp file-transfer proftpd

我想知道是否有检查上传到您的 ftp 服务器是否成功的最佳实践。

我正在使用的系统有一个上传目录,其中包含上传文件的每个用户的子目录。

这些目录中的文件只是临时的,一旦处理它们就会被丢弃。

系统循环遍历每个子目录和其中的新文件,并为每个文件检查它是否被修改 10 秒。如果 10 秒内没有修改,系统认为文件上传成功。

我不喜欢系统当前处理这些情况的方式,因为它会尝试处理文件并在文件上传不完整时失败,而不是等待并允许用户继续上传直到上传完成。 对于不需要很多时间上传的小文件来说可能没问题,但如果文件很大,我希望能够恢复上传。

我也不喜欢目录和文件的循环,系统在高 cpu 使用率下闲置,所以我实现了 pyinotify写入文件时触发操作。我还没有真正看过源代码,我只能假设它比当前的实现更优化(比我描述的要多)。

不过我还需要检查文件是否上传成功。

我知道我可以解析 xferlog 以获得所有完整的上传。喜欢:

awk '($12 ~ /^i$/ && $NF ~ /^c$/){print $9}' /var/log/proftpd/xferlog

这将使 pyinotify不必要,因为如果我只跟踪日志,我可以获得完整和不完整上传的路径。

所以我的解决方案是在我的运行循环中检查 xferlog 并且只处理完整的文件。

除非有最佳实践或更好的方法来做到这一点?

这种方法有什么缺点?

我在 debian 服务器上运行我的应用程序,proftpd 安装在同一台服务器上。此外,我无法控制发送文件的客户端。

最佳答案

查看 proftpd 文档,我看到 http://www.proftpd.org/docs/directives/linked/config_ref_HiddenStores.html

The HiddenStores directive enables two-step file uploads: files are uploaded as ".in.filename." and once the upload is complete, renamed to just "filename". This provides a degree of atomicity and helps prevent 1) incomplete uploads and 2) files being used while they're still in the progress of being uploaded.

当您控制 proftpd 时,这应该是解决问题的“更好方法”,因为它会为您处理所有工作 - 您可以假设任何不以 .in. 开头的文件> 是一个完整的上传。您还可以在某个地方的整理脚本中任意一段时间不活动后安全地删除任何孤立的 .in.* 文件。

关于python - Proftpd 验证上传完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7644533/

相关文章:

python - 是否可以使用类型正确复制类

python - Docker、postgres、sqlalchemy - 无法连接到服务器 : Cannot assign requested address

java - 将pdf和tiff添加到同一个pdf文档中并在浏览器中显示

java - 以编程方式在 Linux ec2 实例和 Windows ec2 实例之间传输文件

python - 我怎样才能去掉 ttk 打印表格中的 ], [ 和 ' 标志

python - 使用 Wand 生成 gif,与文件扩展名无关

algorithm - 在FTP中实现mktree最快的方法

java - 如何处理不完整的文件?获取异常

performance - 通过高延迟和高带宽链接传输文件的最快方法是什么?

python - 在 python 中发送/接收文件 UDP