Charger des fichiers utilisateur

Effectué

Au cours de l’exercice suivant, vous allez étendre l’application pour prendre en charge les chargements de fichiers. Il existe deux façons de charger un fichier à l’aide de Microsoft Graph. Le moyen le plus simple consiste à utiliser une seule requête PUT :

var driveItem = await _graphServiceClient
    .Me.Drive.Root
    .ItemWithPath(itemPath)
    .Content
    .Request()
    .PutAsync<DriveItem>(stream);

Toutefois, cette méthode est limitée à 4 Mo. La méthode la plus complexe implique une série de demandes HTTP comme une « session de chargement ». Heureusement, le kit de développement logiciel (SDK) Microsoft Graph rend la méthode plus simple ! L’objet LargeFileUploadTask bien nommé gère tous les détails.

Pour utiliser LargeFileUploadTask objet, une session de chargement doit d’abord être créée :

var uploadSession = await _graphServiceClient.Me.Drive.Root
    .ItemWithPath(itemPath)
    .CreateUploadSession(uploadProps)
    .Request()
    .PostAsync();

La session de chargement est passée dans le constructeur LargeFileUploadTask , ainsi que le flux à charger et la taille de tranche maximale. La valeur de taille de tranche maximale doit être un multiple de 320 Ko :

int maxSliceSize = 320 * 1024;
var fileUploadTask = new LargeFileUploadTask<DriveItem>(uploadSession, stream, maxSliceSize);

Pour suivre la progression du chargement du fichier, un objet Progress peut être créé et passé dans la méthode UploadAsync de l’objet LargeFileUploadTask.

IProgress<long> progress = new Progress<long>(prog =>
{
  _logger.LogInformation($"Uploaded {prog} bytes of {stream.Length} bytes");
});

var uploadResult = await fileUploadTask.UploadAsync(progress);

Pour démarrer le chargement du fichier, un formulaire HTML peut être ajouté à la page web avec une entrée de fichier et un bouton :

<form method="post" enctype="multipart/form-data">
  <input asp-for="UploadedFile" type="file"></input>
  <input type="submit" value="Upload File"></input>
</form>

Lorsqu’un utilisateur envoie un chargement de fichier, les données sont affectées à une propriété nommée UploadedFile dans le modèle de page Razor nommé FilesModel. Le nom de la propriété correspond à la valeur asp-for définie dans le contrôle d’entrée de fichier du formulaire.

[BindProperty]
public IFormFile UploadedFile { get; set; }

Voyons comment ces différentes parties peuvent être regroupées pour prendre en charge les chargements de fichiers.