检查Twisted的FTPClient.retrieveFile方法检索的文件是否完整

时间:2009-11-18 16:32:36

标签: python ftp client twisted

我正在编写一个自定义ftp客户端,作为我们合作伙伴雇佣的分包商传入的多媒体内容的守门人。我之所以选择twisted,是因为它允许我在将文件写入本地磁盘之前解析文件内容,而且我一直在寻找探索扭曲的机会。我正在使用'twisted.protocols.ftp.FTPClient.retrieveFile'来获取文件,将转义路径传递给文件,并将协议传递给'retrieveFile'方法。我想绝对确定整个文件已被检索,因为回调中的事件处理程序将把文件写入本地磁盘,然后从lftp中的ftp服务器alla'-E'切换行为中删除远程文件客户。我的问题是,我真的需要担心这个问题,还是我可以假设如果没有完全检索到文件会发生错误的回复?

1 个答案:

答案 0 :(得分:4)

在这个领域有几个单元测试行为。

twisted.test.test_ftp.FTPClientTestCase.test_failedRETR是最直接相关的。它涵盖了在文件传输过程中丢失控制和数据连接的情况。

在我看来,该领域的测试覆盖率可以得到显着改善。例如,没有测试覆盖仅在传输正在进行时数据连接丢失的情况。但是,使这一点变得棘手的一件事是FTP不是一个非常强大的协议。文件传输的结束由数据连接关闭发出信号。为了安全起见,您必须检查是否收到了预期接收的字节数。执行此检查的唯一方法是提前知道文件大小,或使用LISTFTPClient.list)向服务器询问。

考虑到所有这些,我建议当文件传输完成时,你总是要求服务器你应该得到多少字节,并确保它与传递给你的协议的字节数一致。您有时可能会从Deferred返回的retrieveFile获得错误回复,但即使在您不这样做的情况下也会保证您的安全。