Télécharger les contenus multimédias

Le téléchargement de contenus multimédias avec reprise est une fonctionnalité de la bibliothèque cliente .NET des API Google depuis la version 1.4.0-bêta. Les bibliothèques spécifiques aux API Google contiennent des méthodes pratiques permettant d'interagir avec cette fonctionnalité.

Ce protocole est semblable au protocole d'importation de médias avec reprise décrit, par exemple, sur la page d'importation de fichiers multimédias pour l'API Drive.

La principale classe d'intérêt est MediaDownloader. Dans cette implémentation du téléchargement de média avec reprise, le contenu multimédia est téléchargé en fragments (la taille des fragments est configurable).

Exemple de code

Si les méthodes des bibliothèques spécifiques à l'API contiennent le paramètre "supportsMediaDownload" dans le document de découverte, les méthodes pratiques Download et DownloadAsync sont disponibles dans la classe de requête. Ces méthodes téléchargent les données multimédias dans un objet Stream que vous fournissez. Par exemple :
{
    // 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);
}