我们有一个ftp系统设置来监控/下载不受我们控制的远程ftp服务器。该脚本连接到远程ftp,并获取服务器上文件的文件名,然后检查它是否已经下载了。如果尚未下载,我们下载该文件并将其添加到列表中。
我们最近遇到了一个问题,远程ftp端的某人将复制到一个庞大的单个文件(> 1GB),然后脚本将被唤醒,看到一个新文件并开始下载正在复制的文件
检查这个的最佳方法是什么?我想抓住文件大小等待几秒再次检查文件大小,看看它是否有增加,如果没有,那么我们下载它。但是,由于时间紧迫,我们不能等待几秒钟的每个文件集,看看它的文件大小是否增加。
最好的解决方法是什么,目前一切都是通过pythons ftplib完成的,除了使用上述方法外,我们怎么做呢。
再次让我重申一下,我们对远程ftp站点有0控制权。
感谢。
UPDATE1:
我在想如果我试图重命名它...因为我们对ftp有完全权限,如果文件上传正在进行中,重命名命令会失败吗?
我们这里没有任何实际选择......我们呢?
UPDATE2: 这里有一些有趣的东西,我们测试过的一些ftps看起来会在传输开始后自动分配空间。
E.g。如果我将200mb文件传输到ftp服务器。如果我连接到ftp服务器并在上传发生时执行大小,则传输处于活动状态。它显示了200mb的大小。即使文件只有10%完成。
权限似乎也是随机设置的,IIS附带的FTP服务器在文件完成复制后设置权限。虽然其他一些旧的ftp服务器在您发送文件后立即设置它。
:'(
答案 0 :(得分:5)
“该死的鱼雷!全速前进!“
只需下载文件即可。如果它是一个大文件,则在下载完成后等待,只要对您的方案合理,并从停止的点继续下载。重复,直到没有更多东西要下载。
答案 1 :(得分:0)
您无法知道OS副本何时完成。它可能会减速或等待。
绝对确定,你真的需要两个文件。
他们可以随心所欲地处理大量文件。但是,当他们触摸触发器文件时,您将同时下载它们。
如果您无法获得触发,则必须平衡投票所需的时间与下载所需的时间。
这样做。
获取商家信息。检查时间戳。
检查尺寸与以前的文件大小。如果尺寸不均匀,则立即复制。等待;循环此步骤,直到大小接近以前的大小。
虽然你没有完成:
一个。获取文件。
湾获取列表再次。检查新商家信息的大小,上一个商家信息和您的文件。如果他们同意:你已经完成了。如果他们不同意:在您下载时文件已更改;你没有完成。
答案 2 :(得分:0)
正如你所说,你对服务器有0控制权,并且无法按照S. Lott的建议让你的客户端发布触发器文件,你必须处理不完美的解决方案,并冒着不完整的文件传输风险,也许等待一段时间,比较之前和之后的文件大小。
您可以尝试按照建议重命名,但由于您有0控制权,因此无法确定ftp-server-administrator(或其后续版本)不会更改平台或ftp服务器或限制您的权限。 / p>
对不起。
答案 3 :(得分:0)
如果您正在处理多个文件,您可以立即获取所有大小的列表,等待十秒,然后查看哪些是相同的。无论哪一个都应该是安全的下载。