Graph API v5 上传文件到共享点

问题描述 投票:0回答:2

我已经使用 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;  

图形API文档

上传示例

任何人都可以向我推荐如何使用 graph api v5 上传的文档。

使用旧版本的 Graph API 而不是版本 5 是否更好?使用 http 客户端调用而不是使用 SDK 库是否更好?谢谢

microsoft-graph-api sharepoint-online
2个回答
2
投票

如果您知道

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);

文档:

v5升级指南


1
投票

此过程记录在“使用 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。

Possible locations of CreateUploadSessionPostRequestBody

我需要将文件上传到特定目录,因此使用了以下代码:

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;
© www.soinside.com 2019 - 2024. All rights reserved.