Charger des fichiers utilisateur
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.