Pobieranie multimediów do wznowienia

Gdy pobierasz z serwera duży plik multimedialny, użyj opcji wznożonego pobierania multimediów, by pobrać fragment pliku. Biblioteki wygenerowane przez interfejs API Google zawierają wygodne metody interakcji z pobieraniem multimediów z możliwością wznowienia.

Protokół pobierania multimediów umożliwiających wznowienie działania jest podobny do protokołu przesyłania multimediów wznowionego, który został opisany w dokumentacji interfejsu Google Drive API.

Szczegóły implementacji

Główne klasy, które Cię interesują, to MediaHttpDownloader i MediaHttpDownloaderProgressListener. Treści multimedialne są pobierane partiami, a ich rozmiar można dostosowywać. Jeśli w żądaniu wystąpi błąd serwera, jest ono ponawiane.

Jeśli metody w bibliotekach generowanych dla konkretnych usług obsługują pobieranie w dokumencie Discovery, powstaje wygodna metoda pobierania na potrzeby tych metod, które pobierają parametr OutputStream. (Więcej informacji o korzystaniu z pobierania multimediów w ramach Google APIs Discovery Service znajdziesz w artykule o pobieraniu 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);

Możesz też używać tej funkcji bez bibliotek wygenerowanych dla 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

Wznawianie odtwarzania multimediów jest domyślnie włączone, ale możesz je wyłączyć i zamiast niego skorzystać z bezpośredniego pobierania multimediów, na przykład jeśli pobierasz mały plik. Bezpośrednie pobieranie multimediów zostało wprowadzone w wersji 1.9.0-beta biblioteki klienta interfejsu API Google dla języka Java.

Bezpośrednie pobieranie multimediów pozwala pobierać wszystkie treści multimedialne w ramach 1 żądania HTTP, w przeciwieństwie do protokołu wznawiania pobierania multimediów, które można pobierać w wielu żądaniach. Bezpośrednie pobieranie ogranicza liczbę żądań HTTP, ale zwiększa ryzyko niepowodzenia (np. awarii połączenia), które mogą się zdarzyć w przypadku dużych plików.

Sposób użycia jest taki sam jak opisany powyżej, z dodatkowym wywołaniem metody MediaHttpDownloader pobierającej bezpośrednio:

mediaHttpDownloader.setDirectDownloadEnabled(true);