我已经使用 c# 安装了 Graph API v5,并且我正在尝试按照以下示例将文件上传到共享点。似乎某些方法在图 API v5 中不再存在。
第一个代码无法识别物品
var uploadSession = await graphClient.Drive.Items["itemId"].ItemWithPath("SWEBOK.pdf").CreateUploadSession().Request().PostAsync();
无法识别Root
var uploadedFile = client.Me.Drive.Root
.ItemWithPath("smallfile.txt")
.Content
.Request()
.PutAsync<DriveItem>(fileStream)
.Result;
任何人都可以向我推荐如何使用 graph api v5 上传的文档。
使用旧版本的 Graph API 而不是版本 5 是否更好?使用 http 客户端调用而不是使用 SDK 库是否更好?谢谢
如果您知道
driveId
那么您可以通过这种方式访问MicrosoftGraphCreateUploadSession
var uploadSessionBody = new Microsoft.Graph.Drives.Item.Items.Item.MicrosoftGraphCreateUploadSession.CreateUploadSessionPostRequestBody
{
// Item = ...
};
var uploadSession = await _client.Drives["driveId"]
.Items["itemId"]
.ItemWithPath("SWEBOK.pdf")
.MicrosoftGraphCreateUploadSession
.PostAsync(uploadSessionBody);
将文件上传到您的根目录
var uploadedFile = await _client.Drives["Me"].Root
.ItemWithPath("smallfile.txt")
.Content
.PutAsync(fileStream);
文档:
此过程记录在“使用 Microsoft Graph SDK 上传大文件”。
首先,配置一个
CreateUploadSessionPostRequestBody
// Use properties to specify the conflict behavior
// in this case, replace
var uploadSessionRequestBody = new CreateUploadSessionPostRequestBody
{
Item = new DriveItemUploadableProperties
{
AdditionalData = new Dictionary<string, object>
{
{ "@microsoft.graph.conflictBehavior", "replace" }
}
}
};
请注意,此类显然存在于许多命名空间中。就我而言,正确的是 Microsoft.Graph.Drives.Item.Items.Item.CreateUploadSession,但是 YMMV。
我需要将文件上传到特定目录,因此使用了以下代码:
var uploadSession = await GraphServiceClient
.Drives[driveId]
.Items[folderId]
.ItemWithPath(fileName)
.CreateUploadSession
.PostAsync(uploadSessionRequestBody);
如果是大文件,则需要分块进行:
int maxSliceSize = 320 * 1024 * 33; // ~10MB
var fileUploadTask = new LargeFileUploadTask<DriveItem>(uploadSession, fileStream, maxSliceSize);
然后需要执行上传:
var uploadResult = await fileUploadTask.UploadAsync(progress);
为了完成,这里是我的类顶部的
using
,其中包含以下代码:
using Microsoft.Graph;
using Microsoft.Graph.Drives.Item.Items.Item.CreateUploadSession;
using Microsoft.Graph.Models;
using Microsoft.Graph.Models.ODataErrors;