Importer du contenu multimédia

Plusieurs méthodes d'API permettent d'importer des contenus multimédias en plus d'un corps standard. Dans ce cas, la méthode de requête standard est surchargée pour obtenir une valeur Stream à importer.

Présentation

Pour chaque Stream que vous souhaitez importer, vous devez utiliser l'option avec reprise l'importation multimédia, qui permet d'importer des flux en plus petits morceaux. Cela est particulièrement utile si vous transférez des fichiers volumineux, et la probabilité d'une interruption du réseau ou d'une autre transmission le taux d'échec est élevé. Cela peut également réduire l'utilisation de la bande passante en cas de défaillance du réseau. car vous n'avez pas besoin de redémarrer les importations de fichiers volumineux depuis le début.

ResumableMediaUpload

L'importation de fichiers multimédias avec reprise était une fonctionnalité de la bibliothèque cliente .NET des API Google. depuis la version 1.2.0-beta. Les bibliothèques propres à l'API Google contiennent des méthodes pratiques interagissant avec cette fonctionnalité.

Le protocole d'importation de supports avec reprise est décrit, par exemple, sur le page d'importation de contenu multimédia pour l'API Drive. La principale catégorie d'intérêt est ResumableUpload Dans cette implémentation, le contenu multimédia est importé en fragments.

La taille de segment par défaut est de 10 Mo, mais vous pouvez la modifier en définissant la propriété ChunkSize dans la requête sur un multiple de 256 Ko. Si une erreur de serveur se produit dans une requête, l'intervalle exponentiel entre les tentatives est utilisée pour renvoyer les octets qui n'ont pas été correctement importés. Par défaut, l'intervalle exponentiel entre les tentatives est activé pour chaque requête client. Vous pouvez modifier le comportement par défaut lorsque vous créez un nouvel objet de service en modifiant <ph type="x-smartling-placeholder"></ph> Propriété DefaultExponentialBackOffPolicy sur BaseClientService.Initializer et/ou en définissant <ph type="x-smartling-placeholder"></ph> HttpClientInitializer à votre propre implémentation de IConfigurableHttpClientInitializer. qui ajoute une règle d'intervalle entre les tentatives.

Les méthodes compatibles avec l'importation de fichiers multimédias dans la documentation de référence spécifique aux API. Pour ces méthodes d'API, les options Upload et Ajout de méthodes UploadAsync. Ces méthodes ont besoin d'un Stream pour l'importation et de son type de contenu en tant que paramètres.

Assurez-vous que le flux que vous mettez en ligne est placé à 0, sinon vous recevrez un message d'erreur du type "System.InvalidOperationException: The provided header could not found" (Système.InvalidOperationException : l'en-tête donné est introuvable).

Notez qu'en raison du comportement du HttpClient du framework, , si l'importation expire, une exception TaskCanceledException est générée. Si cette exception s'affiche, envisagez d'augmenter manuellement la propriété Timeout dans le client utilisé par votre objet de service.

Exemple de code

// Create the service using the client credentials.
var service = new DriveService(new BaseClientService.Initializer()
{
    HttpClientInitializer = credential,
    ApplicationName = "Application_Name"
});

using var uploadStream = System.IO.File.OpenRead("Local_File_Name");

// Create the File resource to upload.
Google.Apis.Drive.v3.Data.File driveFile = new Google.Apis.Drive.v3.Data.File
{
    Name = "Drive_File_Name"
};
// Get the media upload request object.
FilesResource.CreateMediaUpload insertRequest = service.Files.Create(
    driveFile, uploadStream, "image/jpeg");

// Add handlers which will be notified on progress changes and upload completion.
// Notification of progress changed will be invoked when the upload was started,
// on each upload chunk, and on success or failure.
insertRequest.ProgressChanged += Upload_ProgressChanged;
insertRequest.ResponseReceived += Upload_ResponseReceived;

await insertRequest.UploadAsync();

static void Upload_ProgressChanged(IUploadProgress progress) =>
    Console.WriteLine(progress.Status + " " + progress.BytesSent);

static void Upload_ResponseReceived(Google.Apis.Drive.v3.Data.File file) =>
    Console.WriteLine(file.Name + " was uploaded successfully");