2010-03-29 3 views
4

FTP를 통해 파일의 일부만 전송하려고한다고 가정합니다. 표준 FTP 프로토콜을 사용할 수 있습니까?HTTP 범위 헤더와 같은 FTP 프로토콜에는 어떤 것이 있습니까?

HTTP에서 요청에 Range header을 사용하여 원격 리소스의 데이터 범위를 지정할 수 있습니다. 1MB 파일이라면 600k에서 700k까지 바이트를 요청할 수 있습니다.

FTP에 그런 것이 있습니까? 나는 the FTP RFC을 읽고 있는데, 아무 것도 보이지 않지만, 나는 아무것도 놓치고 있지 않다는 것을 확인하고 싶다.

FTP에 다시 시작 명령이 있습니다. 작동합니까?


부록
Brian Bondy's answer below을 얻기 후에, 나는 FTP를 래핑 읽기 전용 스트림 클래스를 썼다. REST 동사에 따라 FTP를 통해 읽은 리소스에 대해 Seek() 및 Read() 작업을 지원합니다.
http://cheeso.members.winisp.net/srcview.aspx?dir=streams&file=FtpReadStream.cs

데이터 소켓을 설정하는 데 시간이 오래 걸리기 때문에 Seek()가 상당히 느립니다. 해당 스트림을 BufferedStream으로 감쌀 때 최상의 결과가 나타납니다.

답변

6

REST 명령을 사용할 수 있습니다.

REST은 후속 파일 전송을 시작할 지점을 설정합니다. 일반적으로 중단 된 전송을 다시 시작하는 데 사용됩니다. 명령은 RETR 또는 STOR 바로 앞에 와야하므로 PORT 또는 PASV이 오게됩니다.

는 FTP의 RFC 959에서 :

RESTART (REST) ​​인수 필드 파일 전송을 다시 시작하는 것입니다되는 서버 마커를 나타냅니다. 이 명령은 파일 전송을 일으키지 않으며 이지만 지정된 데이터 검사 점 으로 파일을 건너 뜁니다. 이 명령은 적절한 FTP 서비스 명령 에 의해 이 바로 뒤따라야합니다. 그러면 파일 전송이 으로 재개됩니다.

더 읽기 : http://www.faqs.org/rfcs/rfc959.html#ixzz0jZp8azux

+0

우수. 이는 답변의 처음 부분 인 범위의 시작을 설정합니다. 전송할 범위의 끝을 설정하는 것은 나머지 절반입니다. 나는 FTP에서 그 일을하는 것이 아무것도 없다고 생각합니다. 그래서 ... 클라이언트가 전송을 중지 할 필요가 있다고 가정합니다. 어쩌면 중단 명령을 보낼 수 있습니다. 테스트가 필요합니다. – Cheeso

+0

@Cheeso : 맞습니다. 데이터가 충분하면 ABOR을 보내거나 데이터 연결을 끊어야합니다. –

+0

시도한 후에 제대로 작동하는 것 같습니다. 감사. – Cheeso

1

당신은 GridFTP 병렬 전송을 수행 방법을 확인해야합니다. 그것은 당신이 원하는 기법을 사용하고 있습니다. 그리고 스스로 코드를 구현하는 것보다 차라리 빌려주는 것이 실제로 코드 일 수도 있습니다.

관련 문제