上傳使用者檔案
在下一個練習中,您將延伸應用程式,以支援檔案上傳。 使用 Microsoft Graph 上傳檔案有兩個方法。 最簡單的方法是使用單一 PUT 要求:
var driveItem = await _graphServiceClient
.Me.Drive.Root
.ItemWithPath(itemPath)
.Content
.Request()
.PutAsync<DriveItem>(stream);
不過,此方法有 4 MB 的限制。 較複雜的方法涉及一系列的 HTTP 要求,做為「上傳工作階段」。 幸好,Microsoft Graph SDK 讓複雜的方法變得簡單易懂! 適當命名的 LargeFileUploadTask
物件會處理所有詳細資料。
若要使用 LargeFileUploadTask
物件,必須先建立上傳上傳:
var uploadSession = await _graphServiceClient.Me.Drive.Root
.ItemWithPath(itemPath)
.CreateUploadSession(uploadProps)
.Request()
.PostAsync();
上傳工作階段會傳入 LargeFileUploadTask
建構函式,以及要上傳的資料流和最大配量大小。 配量大小上限值必須是 320 KB 的倍數:
int maxSliceSize = 320 * 1024;
var fileUploadTask = new LargeFileUploadTask<DriveItem>(uploadSession, stream, maxSliceSize);
若要追蹤檔案上傳進度,可以建立 Progress
物件,並將它傳遞至 LargeFileUploadTask
物件的 UploadAsync
方法。
IProgress<long> progress = new Progress<long>(prog =>
{
_logger.LogInformation($"Uploaded {prog} bytes of {stream.Length} bytes");
});
var uploadResult = await fileUploadTask.UploadAsync(progress);
若要開始檔案上傳,可使用檔案輸入和按鈕,將 HTML 表單新增至網頁:
<form method="post" enctype="multipart/form-data">
<input asp-for="UploadedFile" type="file"></input>
<input type="submit" value="Upload File"></input>
</form>
當使用者提交檔案上傳時,會將資料指派給名為 FilesModel
的 Razor 頁面模型中名爲 UploadedFile
的屬性。 屬性的名稱與表單的檔案輸入控制項中所定義的 asp-for
值相符。
[BindProperty]
public IFormFile UploadedFile { get; set; }
讓我們來看看如何將這些不同的部分放在一起,以支援檔案上傳。