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

서버에서 대용량 미디어 파일을 다운로드할 때는 재개 가능한 미디어 다운로드를 사용하여 청크 파일 청크를 다운로드합니다. 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);

직접 미디어 다운로드

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

직접 미디어 다운로드는 재개 가능한 미디어 다운로드 프로토콜(여러 요청에서 다운로드 가능)과 달리 하나의 HTTP 요청으로 전체 미디어 콘텐츠를 다운로드합니다. 직접 다운로드를 수행하면 HTTP 요청 수가 줄어들지만 대규모 다운로드로 인해 발생할 수 있는 연결 실패와 같은 오류가 발생할 가능성이 증가합니다.

사용법은 위에 설명한 것과 동일하며 MediaHttpDownloader에 직접 다운로드를 실행하도록 지시하는 다음 호출도 포함합니다.

mediaHttpDownloader.setDirectDownloadEnabled(true);