Téléchargements de fichiers multimédias avec reprise

Lorsque vous téléchargez un fichier multimédia volumineux à partir d'un serveur, utilisez téléchargement de contenu multimédia avec reprise pour télécharger le fichier fragment par fragment. L'API Google les bibliothèques générées contiennent des méthodes pratiques permettant d'interagir avec les téléchargement multimédia.

Le protocole de téléchargement de médias avec reprise est semblable à celui utilisé pour l'importation de médias avec reprise. décrit dans le Documentation de l'API Google Drive

Détails de mise en œuvre

Les principales classes intéressantes sont MediaHttpDownloader et MediaHttpDownloaderProgressListener. Le contenu multimédia est téléchargé en fragments, et la taille de ces fragments est configurable. Si un une erreur de serveur est rencontrée dans une requête, celle-ci est relancée.

Si les méthodes des bibliothèques générées par le service sont compatibles avec le téléchargement dans Document de découverte, puis un méthode de téléchargement pratique est créée pour ces méthodes, qui utilise un OutputStream Pour en savoir plus sur l'utilisation du téléchargement de fichiers multimédias avec le service de découverte des API Google, consultez Téléchargement multimédia)

Exemple :

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

Vous pouvez également utiliser cette fonctionnalité sans les bibliothèques générées spécifiques au service. Voici un exemple :

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

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

Téléchargement multimédia direct

Le téléchargement de fichiers multimédias avec reprise est activé par défaut, mais vous pouvez le désactiver et utiliser le téléchargement multimédia direct, par exemple si vous téléchargez un petit fichier. Le téléchargement direct de contenu multimédia a été introduit dans 1.9.0-beta de la bibliothèque cliente des API Google pour Java.

Le téléchargement direct de contenu multimédia télécharge l'ensemble du contenu multimédia en une seule requête HTTP, par opposition au protocole de téléchargement de média avec reprise, qui peut être téléchargé requêtes. Le téléchargement direct réduit le nombre de requêtes HTTP, mais augmente le risque d'échecs (tels que les échecs de connexion) qui peuvent se produire avec des téléchargements volumineux.

L'utilisation est la même que celle décrite ci-dessus, plus les qui indique MediaHttpDownloader pour effectuer des téléchargements directs:

mediaHttpDownloader.setDirectDownloadEnabled(true);