Descargas de contenido multimedia reanudables

Cuando descargues un archivo multimedia grande desde un servidor, usa la descarga de contenido multimedia reanudable para descargar el fragmento por fragmento. Las bibliotecas generadas por la API de Google contienen métodos convenientes para interactuar con la descarga de contenido multimedia reanudable.

El protocolo de descarga de contenido multimedia reanudable es similar al protocolo de carga reanudable de contenido multimedia, que se describe en la documentación de la API de Google Drive.

Detalles de la implementación

Las clases de interés principales son MediaHttpDownloader y MediaHttpDownloaderProgressListener. El contenido multimedia se descarga en fragmentos, y su tamaño se puede configurar. Si se encuentra un error de servidor en una solicitud, se reintenta.

Si los métodos de las bibliotecas generadas específicas del servicio admiten descargas en el documento de descubrimiento, se crea un método de descarga conveniente para estos métodos que toma un OutputStream. (Para obtener más información sobre cómo usar la descarga de contenido multimedia con el servicio de descubrimiento de APIs de Google, consulta Descarga de contenido multimedia).

Por ejemplo:

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

También puedes usar esta función sin bibliotecas generadas específicas del servicio. A continuación, se muestra un ejemplo:

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

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

Descarga directa de contenido multimedia

La descarga de contenido multimedia reanudable está habilitada de forma predeterminada, pero puedes inhabilitarla y usar la descarga de contenido multimedia directa, por ejemplo, si descargas un archivo pequeño. La descarga directa de contenido multimedia se introdujo en la versión 1.9.0-beta de la biblioteca cliente de la API de Google para Java.

La descarga directa de contenido multimedia descarga todo el contenido multimedia en una solicitud HTTP, a diferencia del protocolo de descarga de contenido multimedia reanudable, que puede descargarse en varias solicitudes. Hacer una descarga directa reduce la cantidad de solicitudes HTTP, pero aumenta la posibilidad de que ocurran fallas (como fallas de conexión) que puedan ocurrir con descargas grandes.

El uso es el mismo que el descrito anteriormente, más la siguiente llamada que le indica a MediaHttpDownloader que realice descargas directas:

mediaHttpDownloader.setDirectDownloadEnabled(true);