我正在编写一个自定义的ftp客户端,作为我们的合作伙伴之一雇用的分包商传入的多媒体内容的把关人。我选择twisted是因为它允许我在将文件写到本地磁盘之前解析文件内容,而且我一直在寻找机会来探索twisted。我在用twisted.protocols.ftp.FTPClient.retrieveFile文件'获取文件,将转义路径传递给文件,并将协议传递给“retrieveFile”方法。我肯定要在本地从服务器上取下整个文件的tp开关,因为我肯定要在本地把文件写回文件。我的问题是,我真的需要担心这个问题吗,或者我可以假设如果没有完全检索到文件,会发生错误返回吗?在
在这方面有一些针对行为的单元测试。在
twisted.test.test_ftp.FTPClientTestCase.test_failedRETR
是最直接相关的一个。它涵盖了在文件传输过程中控制和数据连接丢失的情况。在在我看来,这个领域的测试覆盖率可以显著提高。例如,没有测试覆盖在传输过程中仅丢失数据连接的情况。然而,有一点使这一点变得棘手,那就是FTP不是一个非常健壮的协议。文件传输的结束由数据连接关闭发出信号。为了安全起见,您必须检查是否收到了与预期相同的字节数。执行此检查的唯一方法是预先知道文件大小,或者使用
LIST
(FTPClient.list
)向服务器请求文件大小。在考虑到所有这些,我建议在文件传输完成后,总是询问服务器应该获得多少字节,并确保它与传输到协议的字节数一致。有时您可能会在从
retrieveFile
返回的Deferred
上得到一个错误返回,但是即使在没有返回的情况下,这也会保证您的安全相关问题 更多 >
编程相关推荐