Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检查Twisted'检索的文件;s FTPClient.retrieveFile方法的完整性_Python_Ftp_Client_Twisted - Fatal编程技术网

Python 检查Twisted'检索的文件;s FTPClient.retrieveFile方法的完整性

Python 检查Twisted'检索的文件;s FTPClient.retrieveFile方法的完整性,python,ftp,client,twisted,Python,Ftp,Client,Twisted,我正在编写一个自定义ftp客户端,作为从我们的一个合作伙伴雇佣的分包商处接收多媒体内容的守门人。我选择twisted是因为它允许我在本地将文件写入磁盘之前解析文件内容,而且我一直在寻找机会探索twisted。我使用“twisted.protocols.ftp.FTPClient.retrieveFile”来获取文件,将转义路径传递给文件,并将协议传递给“retrieveFile”方法。我想绝对确保已检索到整个文件,因为回调中的事件处理程序将在本地将文件写入磁盘,然后在lftp客户端中从ftp服务

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

在这方面有一些行为单元测试

twisted.test.test\u ftp.ftpclientestcase.test\u failedRETR
是最直接相关的。它涵盖了文件传输过程中控制和数据连接丢失的情况

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


考虑到所有这些,我建议当文件传输完成时,您总是询问服务器您应该获得多少字节,并确保它与传输到协议的字节数一致。从
检索文件返回的
延迟
有时可能会出现错误,但即使在没有错误的情况下,这也会保证您的安全。

Thx,这正是我需要知道的,我可以从FTPFileListProtocol.file对象中提取大小,并将其传递,以检查写入磁盘的文件是否达到预期大小。