2011-08-08 4 views
0

저는 ftp 서버에서 파일을 다운로드하는 java로 다운로드 유틸리티를 만들고 있습니다. URLConnection 클래스를 사용하여 연결 및 입력 스트림을 스트림 객체로 설정합니다. 내가 직면하고있는 문제는 네트워크 장애 시나리오 (예 : )에서 특정 파일을 다운로드하는 동안 연결이 끊어지면 연결이 복원 된 후 이전에 중단되었던 곳에서 다운로드를 다시 시작하길 원합니다. 다운로드 관리자 네트워크 장애 문제

내가 수행 한 FOLL 이것을 달성하기 : -

/* 여기에, 나는 그것이 downloading.The를 다시 시작해야하는 위치에서 스트림의 포인터를 얻을 수 있도록 지금까지 다운로드 된 바이트 수를 건너 뛰도록 노력하고 있어요 skip() 메서드는 매개 변수로 주어진 바이트 수를 건너 뛸 필요가 없기 때문에 while 루프를 건너 뛸 수 있습니다. */

while(totalByteSkipped!=downloaded) 
{ 
     bytesSkipped = stream.skip(downloaded-totalByteSkipped); 

     totalByteSkipped = totalByteSkipped+bytesSkipped; 
} 

그러나 수동으로 많은 바이트를 건너 뛰는 이러한 접근 방식은 매우 느리고 난 지점 어디에서 스트림의 포인터를 얻을 수있는 메커니즘이 필요 그러한 경우에 따라서, 다운로드의 전체 시간에 영향을 미칩니다 다운로드가 중지되었습니다.

동일한 대안에 대한 대안을 원합니다. 감사합니다.

답변

0

다운로드를 재개하려면 FPT restart을 구현해야합니다. 서버에서 지원하는 경우 파일에서 오프셋을 지정할 수 있습니다.

이미 존재하는 FTP 클라이언트를 사용하지 않는 이유가 있습니까? Commons Net FTP Client은 다시 시작을 지원합니다.

+0

안녕 블라드, 고맙습니다. sunsite.ftp 패키지에서 FtpClient를 사용하고있었습니다. apache에서 FTPClient 클래스를 인식하지 못했습니다. 확실히 문제를 해결하는 데 도움이되는지 확인하십시오. 고맙습니다. 다시 :-) – shabeena

+0

@Shabeena : http://www.docjar.com/docs/api/sun/net/ftp/FtpClient.html#setRestartOffset%28long%29 – Vlad

+0

FtpClient에는 다음과 같은 편리한 방법이 없습니다. 다시 시작 오프셋하지만 아파치에서 FTPClient 않습니다. – shabeena

0

skip()은 모든 데이터를 다운로드하고 삭제하기 때문에 효과가 없습니다. 서버는이 비트가 버려 졌음을 알리지 않고 클라이언트에서 버려집니다.

잘못된 끝을보고 있습니다. FTP 프로토콜 (또는 사용하는 용도)이이 동작을 허용하는지 여부와 사용하기 위해 전송해야하는 지침을 확인하십시오. 그렇지 않으면 처음부터 원하는 모든 데이터를 보내 게됩니다.