3

我正在编写一个自定义 ftp 客户端,作为我们的合作伙伴之一雇用的分包商传入的多媒体内容的看门人。我选择了twisted,因为它允许我在将文件写入本地磁盘之前解析文件内容,而且我一直在寻找机会来探索twisted。我正在使用“twisted.protocols.ftp.FTPClient.retrieveFile”来获取文件,将转义路径传递给文件,并将协议传递给“retrieveFile”方法。我想绝对确定已检索到整个文件,因为回调中的事件处理程序会将文件写入本地磁盘,然后从 ftp 服务器中删除远程文件 alla lftp 中的“-E”开关行为客户。我的问题是,我真的需要担心这个吗?

4

1 回答 1

4

在这方面有几个行为单元测试。

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

在我看来,这方面的测试覆盖率可以显着提高。例如,没有测试涵盖在传输过程中仅丢失数据连接的情况。然而,让这件事变得棘手的一件事是 FTP 不是一个非常健壮的协议。数据连接关闭表示文件传输结束。为了安全起见,您必须检查您收到的字节数是否与预期的一样多。执行此检查的唯一方法是提前知道文件大小或使用LIST( FTPClient.list) 向服务器询问文件大小。

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

于 2009-11-18T17:52:09.630 回答