2009-11-18 3 views
3

저는 우리 파트너 중 한 사람이 고용 한 하청 업체로부터 들어오는 멀티미디어 컨텐츠의 게이트 키퍼 역할을하는 맞춤 FTP 클라이언트를 작성하고 있습니다. 내가 파일을 디스크에 로컬로 기록하기 전에 파일 내용을 구문 분석 할 수 있기 때문에 트위스트를 선택했으며 어쨌든 트위스트를 탐색 할 기회를 찾고있었습니다. 'twisted.protocols.ftp.FTPClient.retrieveFile'을 사용하여 파일을 가져오고, 이스케이프 된 경로를 파일에 전달하고, 프로토콜을 'retrieveFile'메소드에 전달합니다. 나는 절대적으로 전체 파일을 검색했기 때문에 콜백의 이벤트 핸들러가 파일을 디스크에 로컬로 기록한 다음 FTP 서버에서 원격 파일을 삭제할 것이므로 lftp에서 alla -E 스위치 동작 고객. 제 질문은, 정말로 이것에 대해 걱정할 필요가 있습니까, 아니면 파일이 완전히 검색되지 않으면 오류가 발생한다고 가정 할 수 있습니까?Twisted의 FTPClient.retrieveFile 메소드로 검색 한 파일을 검사하여 완성도를 확인하십시오.

답변

4

이 영역에서 동작에 대한 몇 가지 단위 테스트가 있습니다.

twisted.test.test_ftp.FTPClientTestCase.test_failedRETR이 가장 직접적인 관련성이 있습니다. 파일 전송이 진행되는 동안 제어 및 데이터 연결이 끊어지는 경우를 다룹니다.

이 영역의 테스트 적용 범위가 크게 개선 될 수 있다고 생각됩니다. 전송이 진행되는 동안 데이터 연결이 손실되는 경우를 다루는 테스트는 없습니다. 이 까다로운 만드는 한 가지는 FTP가 매우 강력한 프로토콜이 아닙니다. 파일 전송의 끝은 데이터 연결을 닫음으로써 신호됩니다. 안전을 기하기 위해 수신 할 것으로 예상되는 바이트 수를 수신했는지 확인해야합니다. 이 검사를 수행하는 유일한 방법은 미리 파일 크기를 확인하거나 LIST (FTPClient.list)을 사용하여 서버에 요청하는 것입니다.

이 모든 것을 감안할 때 파일 전송이 완료되면 항상 서버에 얼마나 많은 바이트를 받았는지 물어보고 프로토콜에 전달 된 바이트 수와 일치하는지 확인하십시오. Deferred이 (가) retrieveFile에서 반환 될 때가끔 오류가 발생할 수 있지만, 그렇지 않은 경우에도 안전하게 유지됩니다.

+0

Thx 정확히 내가 알아야 할 것은 FTPFileListProtocol.file 개체에서 크기를 선택하고 함께 전달하여 디스크에 기록 된 파일이 예상되는 크기인지 확인합니다. – snarkyname77

관련 문제