gpt4 book ai didi

python - Proftpd 验证上传完成

转载 作者:太空狗 更新时间:2023-10-30 00:51:54 29 4
gpt4 key购买 nike

我想知道是否有检查上传到您的 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com