Downloads von fortsetzbaren Medien

Wenn du eine große Mediendatei von einem Server herunterlädst, kannst du die Datei schrittweise mit einem fortsetzbaren Mediendownload herunterladen. Die von der Google API generierten Bibliotheken enthalten Convenience-Methoden für die Interaktion mit fortsetzbaren Mediendownloads.

Das Protokoll für fortsetzbare Mediendownloads ähnelt dem Protokoll für fortsetzbare Medienuploads, das in der Google Drive API-Dokumentation beschrieben wird.

Implementierungsdetails

Die wichtigsten Klassen sind MediaHttpDownloader und MediaHttpDownloaderprogressListener. Medieninhalte werden in Teilen heruntergeladen und die Segmentgröße kann konfiguriert werden. Wenn in einer Anfrage ein Serverfehler auftritt, wird die Anfrage wiederholt.

Wenn Methoden in den dienstspezifischen Bibliotheken das Herunterladen im Discovery-Dokument unterstützen, wird für diese Methoden eine praktische Downloadmethode erstellt, die einen OutputStream akzeptiert. Weitere Informationen zur Verwendung des Mediendownloads mit dem Google APIs Discovery Service finden Sie unter Mediendownload.

Beispiel:

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

Sie können diese Funktion auch ohne dienstspezifische Bibliotheken verwenden. Hier ein Beispiel:

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

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

Direkter Mediendownload

Der fortsetzbare Mediendownload ist standardmäßig aktiviert, aber Sie können ihn deaktivieren und stattdessen den direkten Mediendownload verwenden, z. B. wenn Sie eine kleine Datei herunterladen. Der direkte Mediendownload wurde in der Version 1.9.0-beta der Google API-Clientbibliothek für Java eingeführt.

Beim direkten Mediendownload wird der gesamte Medieninhalt in einer HTTP-Anfrage heruntergeladen, im Gegensatz zum Protokoll für fortsetzbare Medien, das in mehreren Anfragen heruntergeladen werden kann. Durch einen direkten Download verringert sich die Anzahl der HTTP-Anfragen. Allerdings steigt dadurch die Wahrscheinlichkeit von Fehlern (z. B. Verbindungsfehlern), die bei großen Downloads auftreten können.

Die Verwendung entspricht der oben beschriebenen Verwendung und durch den folgenden Aufruf wird MediaHttpDownloader angewiesen, direkte Downloads durchzuführen:

mediaHttpDownloader.setDirectDownloadEnabled(true);