Exercice : charger des fichiers utilisateur
Voici comment ajouter une fonctionnalité de chargement à votre application.
Afficher un élément d’entrée de fichier de navigateur
Ouvrez Pages/Files.cshtml dans votre éditeur de code.
Recherchez l’élément
form
existant et notez qu’il contient un contrôle d’entrée de fichier. L’entrée a une valeurasp-for
deUploadedFile
.<form method="post" enctype="multipart/form-data"> <input asp-for="UploadedFile" type="file"> <input type="submit" value="Upload File"> </form>
Ouvrez Pages/Files.cshtml.cs votre éditeur de code.
Le fichier téléchargé par un utilisateur sera affecté à une propriété dans la classe
FilesModel
nomméeUploadedFile
.Recherchez la méthode
OnPostAsync()
et remplacez le code existant par le code suivant pour gérer la copie du fichier téléchargé dans MemoryStream. Une fois le flux créé, il est transmis à la méthode_graphFilesClient.UploadFile()
.if (UploadedFile == null || UploadedFile.Length == 0) { return; } _logger.LogInformation($"Uploading {UploadedFile.FileName}."); using (var stream = new MemoryStream()) { await UploadedFile.CopyToAsync(stream); await _graphFilesClient.UploadFile( UploadedFile.FileName, stream); } await OnGetAsync();
Enregistrez le fichier Files.cshtml.cs avant de continuer.
Ajouter la prise en charge du chargement de fichiers de grande taille
Ouvrez Graph/GraphFilesClient.cs dans votre éditeur de code.
Recherchez la méthode
UploadFile()
et notez qu’elle gère les tâches suivantes :- La taille du fichier téléchargé est déterminée.
- Si le fichier est supérieur à 4 Mo, un appel est effectué vers une méthode nommée
UploadLargeFile()
. - Si la taille du fichier est inférieure à 4 Mo, une demande PUT est effectuée pour charger le fichier.
Recherchez la méthode
UploadLargeFile()
. Elle accepte un chemin d’accès d’élément et le flux de fichier à télécharger en tant que paramètres. Elle crée également un objetDriveItemUploadableProperties
qui gère le remplacement des fichiers pendant le processus de chargement s’ils existent déjà dans OneDrive.Recherchez le commentaire
Create the upload session
. Ajoutez le code suivant juste avant le commentaire :var uploadSession = await _graphServiceClient.Me.Drive.Root .ItemWithPath(itemPath) .CreateUploadSession(uploadProps) .Request() .PostAsync(); // Max slice size must be a multiple of 320 KiB int maxSliceSize = 320 * 1024; var fileUploadTask = new LargeFileUploadTask<DriveItem>(uploadSession, stream, maxSliceSize); // Create a callback that is invoked after // each slice is uploaded IProgress<long> progress = new Progress<long>(prog => { _logger.LogInformation($"Uploaded {prog} bytes of {stream.Length} bytes"); });
Ce code effectue les tâches suivantes :
- Crée une session de chargement.
- Crée un objet
LargeFileUploadTask
et lui transmet la session de chargement, le flux à télécharger et la taille maximale du secteur. - Crée un objet de chargement
Progress
de fichier de grande taille qui journalise les informations sur le processus de chargement.
Recherchez le bloc
try
et remplacez le code existant par le code suivant :// Upload the file var uploadResult = await fileUploadTask.UploadAsync(progress); if (uploadResult.UploadSucceeded) { _logger.LogInformation($"Upload complete, item ID: { uploadResult.ItemResponse.Id}"); } else { _logger.LogInformation("Upload failed"); }
Ce code démarre le processus de chargement de fichiers de grande taille et enregistre les informations sur la réussite ou l’échec.
Enregistrez le fichier GraphFilesClient.cs avant de continuer.
Exécuter votre application
Il est temps d’exécuter votre application et de télécharger un fichier !
Effectuez l’étape suivante en fonction de votre éditeur de code :
Visual Studio
Appuyez sur F5 pour générer et exécuter le projet.
Visual Studio Code ou un autre éditeur de code
Ouvrez une fenêtre terminal dans le dossier Début, puis exécutez la commande suivante :
dotnet run
Ouvrez un navigateur et accédez à
https://localhost:5001
.Connectez-vous à l’aide du locataire développeur Microsoft 365 que vous avez utilisé précédemment lors de l’inscription de l’application Microsoft Entra.
Sélectionnez le lien Fichiers dans l’en-tête pour afficher les fichiers OneDrive de l’utilisateur.
Sélectionnez le bouton Choisir un fichier, puis sélectionnez un fichier à partir de votre ordinateur que vous souhaitez télécharger.
Sélectionnez le bouton Télécharger un fichier pour démarrer le processus de chargement. Une fois le chargement du fichier terminé, le fichier est répertorié dans la page.
Remarque
Si la taille du fichier est supérieure à 4 Mo, basculez vers la fenêtre terminal en cours d’exécution. L’état du fichier téléchargé s’affiche. Une fois le téléchargement terminé, une valeur d’ID d’élément est écrite dans la fenêtre du terminal et le nom du fichier s’affiche dans le navigateur.
Fermez votre navigateur et appuyez sur Ctrl+C dans la fenêtre du terminal pour arrêter le serveur avant de continuer.
Remarque
Si vous avez ouvert le projet dans Visual Studio, vous pouvez fermer le navigateur ou sélectionner Maj+F5 dans Visual Studio pour arrêter le serveur. Fermez la fenêtre du terminal de Visual Studio si elle est toujours ouverte.