2012-05-11 4 views
0

FTP를 통해 들어오는 파일을 처리하는 서비스가 있습니다.APPE FTP 명령 전송 완료 감지 서버

Proftpd가 설치된 데비안 서버에서 iNotify 이벤트를 사용하여 파일 전송이 완료된 시점을 확인하고 작업을 시작할 수 있습니다.

파일이 더 이상 기록되지 않으면 이벤트가 트리거됩니다.

새로운 Nikon D4 카메라와 WT-5 무선 송신기가 APPE FTP 명령을 사용하여 파일을 전송할 때까지 완벽하게 작동했습니다.

APEX FTP 명령은 첫 번째 청크가 파일을 만든 후 서버의 기존 파일에 추가되는 데이터 청크에 파일을 보냅니다.

그러나이 결과는 연결이 닫힐 때까지 여러 iNotify 이벤트가 파일로 트리거되는 결과가 여러 번 표시되는 것을 의미합니다.

파일을 처리하기 전에 파일이 처리되기 때문에 오류가 발생합니다. 그리고 나는 항상 처리 된 파일을 제거합니다.

들어오는 파일을 처리 할 때이 서비스가 빠르기 때문에 iNotify를 사용하여이 솔루션이 정말 마음에 들었고 파일 크기가 n 초 동안 변경되지 않았거나 파일 전송 완료되었습니다.

내 질문 : 파일 크기를 확인하거나 마지막으로 수정 한 날짜를 비교하지 않고 파일 전송이 실제로 완료되었는지 확인할 수있는 방법이 있습니까?

나는 proftpd에서 아무런 노력없이이 일을 할 수있는 방법을 찾으려고 노력했다.

같은 파일이 완료되었다는 xferlog에 상태를 여러 번 :

Fri May 11 14:15:41 2012 2 host-95-199-17-243.mobileonline.telia.com 131072 /var/app/incoming/file.JPG b _ i r auser ftp 0 * c 
Fri May 11 14:15:43 2012 2 host-95-199-17-243.mobileonline.telia.com 262144 /var/app/incoming/file.JPG b _ i r auser ftp 0 * c 
Fri May 11 14:15:47 2012 3 host-95-199-17-243.mobileonline.telia.com 385624 /var/app/incoming/file.JPG b _ i r auser ftp 0 * c 

끝에 C는 전송이 완료되었음을 의미합니다.

그래서 파일이 실제로 들어오는 모든 파일에 대해 완료되었는지 확인해야한다면 실제로 완료된 파일에 대한 불필요한 지연을 의미합니다.

이렇게 보이는 것이 비정상적인 문제는 아니지만 그것에 대해 아무 것도 찾을 수 없습니다.

아이디어가 있으십니까?

+0

어떤 이벤트 당신은 inotify를에 대한 듣고? – CagedMantis

+0

IN_CLOSE_WRITE을 (를) 듣고 있습니다. – JayLev

답변

0

유감스럽게도 이런 종류의 사용 사례에는 좋은 답변이 없습니다. 문제는 FTP 클라이언트만이 서버에 데이터 업로드가 완료된 것을 알고 있으며, "파일"이 완료되면 FTP 클라이언트 인 입니다. 프로토콜은 바이트 스트림으로 동작합니다. APPE 명령을 사용했음을 알게되면 청크에서 업로드가 한 번만 수행 될 수 있습니다. FTP 클라이언트가 REST 명령을 사용하고 그 뒤에 STOR이 오는 경우에도 동일한 동작이 발생할 수 있습니다. (SFTP는, 비교를 위해, 가 덩어리로 업로드를 허용 그것을 사용 OPEN, WRITE, WRITE, WRITE ..., CLOSE, 파일을 쓰는 데 사용 된 Unix 시스템 호출에 더 가깝게 매핑됩니다.

QUIT 명령을 트리거로 사용하여 클라이언트가 모든 청크를 자신의 컴퓨터로 업로드 한 것을 알고 싶을 수도 있습니다 섬기는 사람. 이것은 FTP 클라이언트가 한 번에 하나의 FTP 세션 만 열 것이라고 가정 할 때 작동 할 수 있습니다.

특정 사용 사례/요구 사항에 따라 다른 해결책을 찾아내는 것이 가능할 수도 있습니다. 원한다면 이메일을 보내 주시기 바랍니다.

희망이 도움이됩니다.

0

당함 또한 JPG 전송의 끝을 탐지 처리하고 그 솔루션 윈치 스크립트에 통합 할 수 있습니다 사용하려면 : JPEG 데이터가 완료되지 않거나

Catching error: Corrupt JPEG data: premature end of data segment

간단한 방법 확인 FF D8 및 FF D9의 첫 번째 및 마지막 두 바이트를 각각 확인합니다. 이 두 바이트는 각각 JPEG 파일의 시작과 끝을 식별합니다.

또는 ImageMagick를 http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=8483

이는 D5에 도움이 될 희망을 사용) 마티유