Importations de médias directes et avec reprise

Ce document explique comment utiliser les importations de fichiers multimédias directs et avec reprise avec la bibliothèque cliente des API Google pour Java.

Importation de contenu multimédia avec reprise

Lorsque vous importez un fichier multimédia volumineux sur un serveur, utilisez l'importation de contenu multimédia avec reprise pour : envoyer le fichier bloc par bloc. Les bibliothèques générées par l'API Google contiennent méthodes pratiques permettant d'interagir avec l'importation de médias avec reprise.

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

Conception du protocole

Le schéma séquentiel suivant illustre le fonctionnement du protocole d'importation de médias avec reprise:
Schéma séquentiel montrant comment les requêtes et les réponses se déplacent entre le client et le serveur.

Détails de mise en œuvre

Les principales classes d'intérêt sont MediaHttpUploader et MediaHttpProgressListener.

Si les méthodes des bibliothèques générées par le service contiennent le mediaUpload dans le document de découverte, une méthode pratique est créée pour ces méthodes, InputStreamContent en tant que paramètre. Pour en savoir plus sur l'importation de fichiers multimédias avec les API Google, le service de découverte, consultez mise en ligne de contenus multimédias).

Par exemple, la méthode insert de l'API Drive est compatible avec mediaUpload. Vous pouvez utiliser le code suivant pour importer un fichier:

class CustomProgressListener implements MediaHttpUploaderProgressListener {
  public void progressChanged(MediaHttpUploader uploader) throws IOException {
    switch (uploader.getUploadState()) {
      case INITIATION_STARTED:
        System.out.println("Initiation has started!");
        break;
      case INITIATION_COMPLETE:
        System.out.println("Initiation is complete!");
        break;
      case MEDIA_IN_PROGRESS:
        System.out.println(uploader.getProgress());
        break;
      case MEDIA_COMPLETE:
        System.out.println("Upload is complete!");
    }
  }
}

File mediaFile = new File("/tmp/driveFile.jpg");
InputStreamContent mediaContent =
    new InputStreamContent("image/jpeg",
        new BufferedInputStream(new FileInputStream(mediaFile)));
mediaContent.setLength(mediaFile.length());

Drive.Files.Insert request = drive.files().insert(fileMetadata, mediaContent);
request.getMediaHttpUploader().setProgressListener(new CustomProgressListener());
request.execute();

Vous pouvez également utiliser la fonctionnalité d'importation de fichiers multimédias avec reprise, les bibliothèques générées. Voici un exemple:

File mediaFile = new File("/tmp/Test.jpg");
InputStreamContent mediaContent =
    new InputStreamContent("image/jpeg",
        new BufferedInputStream(new FileInputStream(mediaFile)));
mediaContent.setLength(mediaFile.length());

MediaHttpUploader uploader = new MediaHttpUploader(mediaContent, transport, httpRequestInitializer); uploader.setProgressListener(new CustomProgressListener()); HttpResponse response = uploader.upload(requestUrl); if (!response.isSuccessStatusCode()) { throw GoogleJsonResponseException(jsonFactory, response); }

Importation directe de contenu multimédia

L'importation de contenus multimédias avec reprise est activée par défaut, mais vous pouvez la désactiver et utiliser l'importation directe de contenu multimédia, par exemple si vous importez un petit fichier. Accès direct l'importation de contenu multimédia a été introduite dans la version 1.9.0-beta de la bibliothèque cliente des API Google pour Java.

L'importation directe de média permet d'importer l'intégralité du fichier dans une seule requête HTTP, le protocole d'importation de médias avec reprise, qui importe le fichier dans plusieurs requêtes. L'importation directe réduit le nombre de requêtes HTTP, mais augmente la le risque d'échecs (tels que les échecs de connexion) qui peuvent se produire avec de grands mises en ligne.

L'utilisation de l'importation directe de contenu multimédia est identique à celle décrite ci-dessus pour d'importation de média avec reprise, ainsi que l'appel suivant qui indique à MediaHttpUploader pour n'effectuer que des importations directes:

mediaHttpUploader.setDirectUploadEnabled(true);