Descargas de contenido multimedia reanudables

Cuando descargues un archivo multimedia grande desde un servidor, usa resumable media download para descargar el archivo bloque por fragmento. La API de Google las bibliotecas generadas contienen métodos útiles para interactuar con descarga de contenido multimedia.

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

Detalles de implementación

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

Si los métodos de las bibliotecas generadas específicas del servicio admiten la descarga en el Documento de descubrimiento y, luego, conveniente se crea para estos métodos que toma una OutputStream. (Para obtener más información sobre cómo usar la descarga de contenido multimedia con el servicio de descubrimiento de las 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 por servicios específicos. 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 como la descarga directa de contenido multimedia, por ejemplo, si está descargando un archivo pequeño. La descarga directa de contenido multimedia se introdujo en el 1.9.0-beta de la biblioteca cliente de la API de Google para Java.

La descarga directa de medios descarga todo el contenido multimedia en una solicitud HTTP, como en comparación con el protocolo de descarga de archivos multimedia reanudable, que puede descargar en varios solicitudes. Una descarga directa reduce la cantidad de solicitudes HTTP, pero aumentan las posibilidades de que ocurran fallas (como fallas en la conexión) con descargas grandes.

El uso es el mismo que el descrito anteriormente, además de los siguientes llamada que le dice MediaHttpDownloader para hacer descargas directas:

mediaHttpDownloader.setDirectDownloadEnabled(true);