Descargas de medios reanudables

Cuando descargues un archivo multimedia grande de un servidor, usa la descarga multimedia reanudable para descargar el fragmento de archivo 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 de contenido multimedia reanudable, 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 el tamaño de los fragmentos se puede configurar. Si se encuentra un error de servidor en una solicitud, se reintenta.

Si los métodos de las bibliotecas generadas por el servicio son compatibles con la descarga en el documento de descubrimiento, se crea un método de descarga conveniente para estos métodos que toman una OutputStream. (Para obtener más información sobre el uso de descargas multimedia con el servicio de descubrimiento de API de Google, consulta Descarga de medios).

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 por servicios específicas. 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 multimedia reanudable está habilitada de forma predeterminada, pero puedes inhabilitarla y usar la descarga 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 de contenido multimedia directo descarga todo el contenido multimedia en una solicitud HTTP, a diferencia del protocolo de descarga 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 las de conexión) que pueden ocurrir con descargas grandes.

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

mediaHttpDownloader.setDirectDownloadEnabled(true);