서버에서 대용량 미디어 파일을 다운로드할 때는 재개 가능한 미디어 다운로드를 호출하여 파일을 청크별로 다운로드합니다. Google API 생성된 라이브러리에 재개 가능한 함수와 상호작용하기 위한 편의 메서드가 포함되어 있음 미디어 다운로드
재개 가능한 미디어 다운로드 프로토콜은 재개 가능한 미디어 업로드와 유사합니다. 프로토콜에 대해 자세히 알아보려면 Google Drive API 문서
구현 세부정보
주요 관심 클래스는 MediaHttpDownloader 및 MediaHttpDownloaderProgressListener입니다. 미디어 콘텐츠가 청크로 다운로드되며 청크 크기를 구성할 수 있습니다. 만약 요청에 서버 오류가 발생하면 요청이 재시도됩니다.
서비스별로 생성된 라이브러리의 메서드가 검색 문서를 선택한 다음 편리한 다운로드 방법이 생성됩니다. OutputStream을 가져올 수도 있습니다. (Google API 검색 서비스와 함께 미디어 다운로드를 사용하는 방법에 대한 자세한 내용은 미디어 다운로드).
예를 들면 다음과 같습니다.
class CustomProgressListener implements MediaHttpDownloaderProgressListener {
public void progressChanged(MediaHttpDownloader downloader) {
switch (downloader.getDownloadState()) {
case MEDIA_IN_PROGRESS:
System.out.println(downloader.getProgress());
break;
case MEDIA_COMPLETE:
System.out.println("Download is complete!");
}
}
}
OutputStream out = new FileOutputStream("/tmp/driveFile.jpg");
DriveFiles.Get request = drive.files().get(fileId);
request.getMediaHttpDownloader().setProgressListener(new CustomProgressListener());
request.executeMediaAndDownloadTo(out);
서비스별로 생성된 라이브러리 없이도 이 기능을 사용할 수 있습니다. 예를 들면 다음과 같습니다.
OutputStream out = new FileOutputStream("/tmp/Test.jpg");
MediaHttpDownloader downloader = new MediaHttpDownloader(transport, httpRequestInitializer);
downloader.setProgressListener(new CustomProgressListener());
downloader.download(requestUrl, out);
직접 미디어 다운로드
재개 가능한 미디어 다운로드는 기본적으로 사용 설정되어 있지만 사용 중지하고 대신 미디어 직접 다운로드를 사용합니다(예: 작은 파일을 다운로드하는 경우). 직접 미디어 다운로드는 1.9.0-beta Google API 클라이언트 라이브러리 버전입니다.
직접 미디어 다운로드는 단일 HTTP 요청으로 전체 미디어 콘텐츠를 반면에 재개 가능한 미디어 다운로드 프로토콜은 여러 형식으로 다운로드할 수 있고 요청을 처리합니다 직접 다운로드를 하면 HTTP 요청 수가 줄어들지만 발생할 수 있는 장애 (예: 연결 실패)의 가능성을 높입니다. 대용량 다운로드에 적합합니다
사용법은 위에 설명된 것과 동일하고 다음 항목이 추가됩니다. 호출로 MediaHttpDownloader 직접 다운로드를 하려면 다음 단계를 따르세요.
mediaHttpDownloader.setDirectDownloadEnabled(true);