2009-10-31 6 views
7

나는 FTP/HTTP를 통해 자바에서 몇 가지 거대한 파일 (여러 공연)이 필요합니다. 다운로드를 용이하게 할 준비가 된 라이브러리 (java/명령 줄 도구)가 있습니까? 일부 분명한 요구 사항은 다음과 같습니다자바에서 다운로드 관리자

  1. 다중 접속 다운로드 - (Flashget의/GetRight/... 등) 다운로드
  2. 다시 시작을 가속화하기 위해 서버에 여러 연결을 열 수 있어야 다운로드

편집 - 실제로 그러한 라이브러리를 작성하지 않고 기존의 테스트를 거친 프로덕션 등급 라이브러리를 훔치거나 지불하는 것을 선호합니다. rsynch는 HTTP 및 FTP 사이트에서 파일을 다운로드해야하기 때문에 관련이 없습니다. 내부 파일 전송을위한 것이 아닙니다.

답변

2

HTTP 프로토콜은 오프셋에서 부분 다운로드를 시작하도록 지원하지만 파일의 로컬 부분 버전의 유효성을 검사하는 데 제한적으로 지원하여 정크가 끝에 붙지 않았는지 확인합니다 (또는 비슷한). 사용 환경에서 허용하는 경우 --partial 옵션과 함께 rsync을 사용하는 것이 좋습니다. 커맨드 라인에서 이런 종류의 기능을 지원하도록 고안되었습니다.

rsync를 사용할 수없는 경우 Commons-HTTPClient를 사용하고 Range HTTP 헤더를 사용하여 관리 가능한 크기의 청크를 다운로드 할 수 있습니다.

2

자바에서 소켓 및 스레드를 만드는 방법을 알고 있다면 그렇게 어렵지 않습니다.

먼저 요청을 만들고 헤더를 읽어 Content-length 헤더를 가져옵니다. 그런 다음 각 요청을 500K 덩어리로 나누는 전략을 세웁니다. 그런 다음 각 요청에 대해 스레드를 사용하여 10 개의 요청을 시작하십시오. 각 요청에서 Range 헤더를 정의해야합니다.

다운로드를 다시 시작하려면 아직 다운로드하지 않은 범위를 저장해야합니다. 정말이 프로토콜을 잘 이해하려면이 HTTP/1.1 헤더 필드 RFC here을 읽으십시오.

그러나 쉬운 방법을 찾으려면 rsync 또는 scp로 충분합니다.