Pobieranie multimediów do wznowienia

Jeśli pobierasz z serwera duży plik multimedialny, użyj pobieranie multimediów z możliwością wznowienia, aby pobrać plik fragmentami. Interfejs API Google generowane biblioteki zawierają wygodne metody interakcji z elementami, które można wznowić pobieranie multimediów.

Protokół pobierania multimediów z możliwością wznawiania jest podobny do przesyłania multimediów z możliwością wznawiania który jest opisany w Dokumentacja interfejsu Google Drive API.

Szczegóły implementacji

Najważniejsze klasy to MediaHttpDownloader i MediaHttpDownloaderProgressListener. Treści multimedialne są pobierane fragmentami. Rozmiar fragmentów można skonfigurować. Jeśli w żądaniu wystąpił błąd serwera, a następnie jest ono ponawiane.

Jeśli metody w wygenerowanych bibliotekach dla danej usługi obsługują pobieranie w Dokument opisujący, a potem dla tych metod, które pobierają OutputStream – Więcej informacji o pobieraniu multimediów za pomocą usługi wykrywania interfejsów API Google znajdziesz w artykule Pobieranie multimediów)

Na przykład:

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);

Z tej funkcji możesz też korzystać bez bibliotek wygenerowanych na potrzeby konkretnej usługi. Oto przykład:

OutputStream out = new FileOutputStream("/tmp/Test.jpg");

MediaHttpDownloader downloader = new MediaHttpDownloader(transport, httpRequestInitializer);
downloader.setProgressListener(new CustomProgressListener());
downloader.download(requestUrl, out);

Bezpośrednie pobieranie multimediów

Pobieranie multimediów z wznawianiem jest domyślnie włączone, ale możesz je wyłączyć i używać bezpośredniego pobierania multimediów, np. gdy pobierasz mały plik. Bezpośrednie pobieranie multimediów zostało wprowadzone 1.9.0-beta biblioteki klienta interfejsów API Google dla języka Java.

Bezpośrednie pobieranie multimediów pobiera wszystkie treści multimedialne w jednym żądaniu HTTP, w przeciwieństwie do protokołu pobierania multimediów z możliwością wznowienia, który umożliwia pobieranie żądań. Bezpośrednie pobieranie zmniejsza liczbę żądań HTTP, ale Zwiększa ryzyko wystąpienia awarii (np. awarii połączenia) z dużymi plikami do pobrania.

Zastosowanie jest takie samo jak opisane powyżej, a dodatkowo: połączenia, które opowiada MediaHttpDownloader aby bezpośrednio pobierać:

mediaHttpDownloader.setDirectDownloadEnabled(true);