2009-11-18 51 views
3

我正在寫一個自定義的ftp客戶端,充當來自我們的合作伙伴僱用的分包商的傳入多媒體內容的看門人。我選擇了twisted,因爲它允許我在將文件寫入本地磁盤之前解析文件內容,而且我一直在尋找探索扭曲的場合。我使用'twisted.protocols.ftp.FTPClient.retrieveFile'來獲取文件,將轉義路徑傳遞給文件,並將協議傳遞給'retrieveFile'方法。我想要確保整個文件已被檢索,因爲回調中的事件處理程序要將文件寫入本地磁盤,然後從ftp服務器刪除遠程文件。alla'-E'在lftp中切換行爲客戶。我的問題是,我是否真的需要擔心這個問題,或者我可以假設如果文件沒有被完全檢索就會發生錯誤嗎?檢查由Twisted的FTPClient.retrieveFile方法檢索的文件的完整性

回答

4

這裏有幾個單元測試行爲。

twisted.test.test_ftp.FTPClientTestCase.test_failedRETR是最直接相關的一個。它涵蓋了在文件傳輸過程中控制和數據連接丟失的情況。

在我看來,在這方面的測試覆蓋率可以顯着提高。例如,沒有測試涵蓋僅在傳輸正在進行時數據連接丟失的情況。但是,有一件事情使得這個棘手的問題是,FTP不是一個非常健壯的協議。文件傳輸的結束通過數據連接關閉來發信號通知。爲了安全起見,你必須檢查你是否收到了你期望收到的字節數。執行此檢查的唯一方法是提前知道文件大小或使用LISTFTPClient.list)向服務器請求。

考慮到所有這些,我建議當文件傳輸完成時,您總是詢問服務器應該獲得多少字節,並確保它與傳遞到協議的字節數一致。您有時可能會從retrieveFile返回的Deferred上發生錯誤,但即使在您不這樣做的情況下,這也可以保證您的安全。

+0

Thx,正是我需要知道的,我可以從FTPFileListProtocol.file對象中選擇大小,並傳遞它以檢查寫入磁盤的文件是否具有預期的大小。 – snarkyname77 2009-11-18 18:41:39