재개 가능한 미디어 다운로드

서버에서 대용량 미디어 파일을 다운로드할 때 재개 가능한 미디어 다운로드를 사용하여 파일 청크를 단위별로 다운로드하세요. Google API 생성 라이브러리에는 재개 가능한 미디어 다운로드와 상호작용하기 위한 편의 메서드가 포함되어 있습니다.

재개 가능한 미디어 다운로드 프로토콜은 Google Drive API 문서에 설명된 재개 가능한 미디어 업로드 프로토콜과 유사합니다.

구현 세부정보

주목할 만한 주요 클래스는 MediaHttpDownloaderMediaHttpDownloaderProgressListener입니다. 미디어 콘텐츠는 단위별로 다운로드되며 단위 크기를 구성할 수 있습니다. 요청에 서버 오류가 발생하면 요청이 재시도됩니다.

서비스별로 생성된 라이브러리의 메서드가 검색 문서에서의 다운로드를 지원하는 경우 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);

미디어 직접 다운로드

재개 가능한 미디어 다운로드는 기본적으로 사용 설정되어 있지만 사용 중지하고 대신 직접 미디어 다운로드를 사용할 수도 있습니다(예: 작은 파일을 다운로드하는 경우). 직접 미디어 다운로드는 Java용 Google API 클라이언트 라이브러리의 1.9.0-beta 버전에서 도입되었습니다.

직접 미디어 다운로드는 여러 요청으로 다운로드할 수 있는 재개 가능한 미디어 다운로드 프로토콜과 달리 HTTP 요청으로 전체 미디어 콘텐츠를 다운로드합니다. 직접 다운로드하면 HTTP 요청 수가 줄어들지만 대용량 다운로드에서 발생할 수 있는 실패 (예: 연결 실패)가 발생할 가능성이 커집니다.

사용법은 위에 설명된 것과 동일하며, MediaHttpDownloader에 직접 다운로드를 지시하는 다음 호출이 추가됩니다.

mediaHttpDownloader.setDirectDownloadEnabled(true);