Descargar contenido multimedia

La descarga de contenido multimedia reanudable es una función de la biblioteca cliente de .NET de las API de Google desde la versión 1.4.0-beta. Las bibliotecas específicas de la API de Google contienen métodos convenientes para interactuar con esta función.

El protocolo de descarga de contenido multimedia reanudable es similar al protocolo de carga reanudable de contenido multimedia que se describe, por ejemplo, en la página de carga de contenido multimedia para la API de Drive.

La clase de interés principal es MediaDownloader. En esta implementación de la descarga de contenido multimedia reanudable, el contenido se descarga en fragmentos (el tamaño de los fragmentos se puede configurar).

Código de ejemplo

Si los métodos de las bibliotecas específicas de la API contienen el parámetro "supportsMediaDownload" en el documento de descubrimiento, los métodos de conveniencia Download y DownloadAsync están disponibles en la clase de solicitud. Esos métodos descargan los datos multimedia en un objeto Stream que proporciones. Por ejemplo:
{
    // Create the service using the client credentials.
    var storageService = new StorageService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential,
            ApplicationName = "APP_NAME_HERE"
        });
    // Get the client request object for the bucket and desired object.
    var getRequest = storageService.Objects.Get("BUCKET_HERE", "OBJECT_HERE");
    using (var fileStream = new System.IO.FileStream(
        "FILE_PATH_HERE",
        System.IO.FileMode.Create,
        System.IO.FileAccess.Write))
    {
        // Add a handler which will be notified on progress changes.
        // It will notify on each chunk download and when the
        // download is completed or failed.
        getRequest.MediaDownloader.ProgressChanged += Download_ProgressChanged;
        getRequest.Download(fileStream);
    }
}

static void Download_ProgressChanged(IDownloadProgress progress)
{
    Console.WriteLine(progress.Status + " " + progress.BytesDownloaded);
}