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

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

Ce protocole est semblable au protocole d'importation de contenus multimédias avec reprise, décrit dans la documentation de l'API Google Drive.

Détails de mise en œuvre

Les principaux domaines d'intérêt sont MediaHttpDownloader et MediaHttpDownloaderProgressListener. Le contenu multimédia est téléchargé en fragments, et leur taille est configurable. Si une erreur de serveur se produit dans une requête, celle-ci est relancée.

Si les méthodes des bibliothèques générées pour chaque service acceptent le téléchargement dans le document de découverte, une méthode de téléchargement pratique, qui reçoit un OutputStream, est créée pour ces méthodes. (Pour en savoir plus sur l'utilisation du téléchargement de contenus multimédias avec le service de découverte des API Google, consultez Téléchargement de contenus multimédias.)

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 bibliothèques générées spécifiques à un 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 de contenus multimédias direct

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

Le téléchargement multimédia direct télécharge l'ensemble du contenu multimédia dans une requête HTTP, contrairement au protocole de téléchargement multimédia avec reprise, qui peut être téléchargé en plusieurs requêtes. Un téléchargement direct réduit le nombre de requêtes HTTP, mais augmente les risques de défaillances (telles que les échecs de connexion) susceptibles de se produire avec des téléchargements volumineux.

L'utilisation est identique à celle décrite ci-dessus, à l'exception de l'appel suivant qui indique à MediaHttpDownloader d'effectuer des téléchargements directs:

mediaHttpDownloader.setDirectDownloadEnabled(true);