Упражнение — отправка файлов пользователей
Ниже представлены шаги для добавления функции отправки в приложение.
Отображение элемента ввода файлов в браузере
Откройте Pages/Files.cshtml в редакторе кода.
Найдите существующий элемент
form
и обратите внимание, что он содержит элемент управления вводом файлов. Ввод содержит параметрasp-for
со значениемUploadedFile
.<form method="post" enctype="multipart/form-data"> <input asp-for="UploadedFile" type="file"> <input type="submit" value="Upload File"> </form>
Откройте Pages/Files.cs в редакторе кода.
Файл, отправленный пользователем, будет назначен свойству класса
FilesModel
с именемUploadedFile
.Найдите метод
OnPostAsync()
и замените существующий код на указанный ниже код для обработки копирования отправленного файла в MemoryStream. После создания потока он передается методу_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();
Прежде чем продолжать, сохраните файл Files.cshtml.cs.
Добавление поддержки отправки больших файлов
Откройте Graph/GraphFilesClient.cs в редакторе кода.
Найдите метод
UploadFile()
и обратите внимание, что он обрабатывает указанные ниже задачи.- Определяется размер отправленного файла.
- Если размер файла превышает 4 МБ, выполняется вызов метода с именем
UploadLargeFile()
. - Если размер файла не превышает 4 МБ, для отправки файла выполняется запрос PUT.
Найдите метод
UploadLargeFile()
. Он принимает путь элемента и поток файлов для отправки в качестве параметров. Он также создает объектDriveItemUploadableProperties
, который обрабатывает замену файлов во время отправки, если они уже существуют в OneDrive.Найдите комментарий
Create the upload session
. Сразу после комментария добавьте указанный ниже код.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"); });
Этот код выполняет следующие задачи.
- Создает сеанс отправки.
- Создает объект
LargeFileUploadTask
и передает ему сеанс отправки, поток для отправки и максимальный размер среза. - Создает объект
Progress
отправки больших файлов, который регистрирует сведения о процессе отправки.
Найдите блок
try
и замените существующий код указанным ниже кодом.// 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"); }
Этот код запускает процесс отправки больших файлов и регистрирует сведения об успешном выполнении или сбое.
Прежде чем продолжать работу, сохраните файл GraphFilesClient.cs.
Запуск приложения
Пришло время запустить приложение и отправить файл!
Выполните следующий шаг в зависимости от редактора кода, которым пользуетесь.
Visual Studio
Нажмите клавишу F5, чтобы выполнить сборку и запуск проекта.
Visual Studio Code или другой редактор кода
Откройте окно терминала в папке Begin и запустите указанную ниже команду.
dotnet run
Откройте браузер и перейдите по адресу
https://localhost:5001
.Войдите с помощью клиента разработчика Microsoft 365, который использовался ранее при регистрации приложения Microsoft Entra.
Щелкните ссылку Файлы в заголовке, чтобы просмотреть файлы OneDrive пользователя.
Нажмите кнопку Выбрать файл и выберите на компьютере файл, который нужно отправить.
Нажмите кнопку Отправить файл, чтобы начать процесс отправки. После завершения отправки файла вы увидите, что файл указан на странице.
Примечание.
Если размер файла превышает 4 МБ, переключитесь в окно запущенного терминала. Вы увидите состояние отправленного файла. Когда отправка будет завершена, в окне терминала будет записано значение ИД элемента и имя файла отобразится в браузере.
Прежде чем продолжить, закройте браузер и нажмите CTRL+C в окне терминала, чтобы остановить сервер.
Примечание.
Если вы открыли проект в Visual Studio, можете закрыть браузер или нажать клавиши SHIFT+F5 в Visual Studio, чтобы остановить сервер. Закройте окно терминала Visual Studio, если оно еще открыто.