【问题标题】:Microsoft Graph - .NET SDK - OneDrive Large File Upload (> 4MB in size)Microsoft Graph - .NET SDK - OneDrive 大文件上传(> 4MB 大小)
【发布时间】:2016-10-12 00:02:48
【问题描述】:

使用 .NET SDK for Microsoft Graph,您可以上传(小)文件。示例here

如何使用 .NET SDK 上传大文件 (> 4MB)?

也就是说,SDK可以用来实现"Upload large files with an upload session"吗?

【问题讨论】:

    标签: c# onedrive microsoft-graph-api


    【解决方案1】:

    这是我最近使用 Microsoft Graph .Net SDK 编写的代码。 需要GraphServiceClient(graphClient)认证。

        if (fileSize.MegaBytes > 4)
                        {
                            var session = await graphClient.Drive.Root.ItemWithPath(uploadPath).CreateUploadSession().Request().PostAsync();
                            var maxSizeChunk = 320 * 4 * 1024;
                            var provider = new ChunkedUploadProvider(session, graphClient, stream, maxSizeChunk);
                            var chunckRequests = provider.GetUploadChunkRequests();
                            var exceptions = new List<Exception>();
                            var readBuffer = new byte[maxSizeChunk];
                            DriveItem itemResult = null;
                            //upload the chunks
                            foreach (var request in chunckRequests)
                            {
                                // Do your updates here: update progress bar, etc.
                                // ...
                                // Send chunk request
                                var result = await provider.GetChunkRequestResponseAsync(request, readBuffer, exceptions);
    
                                if (result.UploadSucceeded)
                                {
                                    itemResult = result.ItemResponse;
                                }
                            }
    
                            // Check that upload succeeded
                            if (itemResult == null)
                            {
                                await UploadFilesToOneDrive(fileName, filePath, graphClient);
                            }
                        }
                        else
                        {
                            await graphClient.Drive.Root.ItemWithPath(uploadPath).Content.Request().PutAsync<DriveItem>(stream);
                        }
    

    【讨论】:

    • 您能帮我将新文件上传到 onedrive 吗?我设法更新了现有文件,但创建新文件给我带来了麻烦。这是我用来更新现有 onedrive 文件的行。 await client.Me.Drive.Items["55BBAC51A4E4017D!104"].Content.Request().PutAsync&lt;DriveItem&gt;(stream);
    • 文件上传后是否需要关闭会话?
    • 效果很好,谢谢!您是否厌倦了消息附件?我正在处理并遇到图书馆问题
    • @Mike,不,我还没有,已经有一段时间了
    • @Azuriath 请查看此代码github.com/mnakka9/OnedriveGraphUpload
    【解决方案2】:

    这将在 .NET Microsoft Graph 客户端库的下一版本中提供。它将与 .NET OneDrive 客户端库中的功能相同。您可以在我的工作branch 中查看此内容。您可以在 repo 中提供反馈。

    【讨论】:

    • 太好了!我来看看代码。谢谢。
    • >我在 /MIchaelMainer/working 分支中测试了代码,它运行良好。实际上,工作帐户可以,但个人帐户(即使是小文件)失败(“身份验证失败”)。该文档没有说明这只是一个工作帐户功能。也许是?还是有错误?如果它是一个错误,我在代码中看不到它可能在哪里,因为唯一的区别是帐户类型。 (相关:github.com/microsoftgraph/msgraph-sdk-dotnet/issues/61
    • 你能告诉我上传一个新文件到 onedrive 吗?我设法更新了现有文件,但创建新文件给我带来了麻烦。这是我用来更新现有 onedrive 文件的行。 await client.Me.Drive.Items["55BBAC51A4E4017D!104"].Content.Request().PutAsync&lt;DriveItem&gt;(stream);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多