如何使用C#中的Microsoft.Graph.GraphServiceClient实现可恢复上传

时间:2019-06-17 10:44:40

标签: c# onedrive microsoft-graph-sdks

有人知道如何使用C#OneDrive SDK执行可恢复上传吗?

当我使用IDriveItemRequestBuilder.CreateUploadSession时,我总是获得一个新会话,并重置NextExpectedRanges。 如果我使用.UploadURL并手动发送HTTP帖子,则会得到正确的下一个范围,但是我随后不知道使用sdk恢复上传会话的方法。从API到“ OpenUploadSession”似乎没有任何办法,或者至少我可以找到。 我也找不到一个可行的例子。 我怀疑这一定是一个常见的用例。

请注意,文本中的关键字-可恢复

1 个答案:

答案 0 :(得分:0)

恢复方法取决于您拥有多少状态。所需的最低要求最低为UploadSession.UploadUrl(可将其视为会话的唯一标识符)。如果没有该URL,则需要创建一个新的上传会话并从头开始,否则,可以执行以下操作来恢复:

var uploadSession = new UploadSession
{
    NextExpectedRanges = Enumerable.Empty<string>(),
    UploadUrl = persistedUploadUrl,
};

var maxChunkSize = 320 * 1024; // 320 KB - Change this to your chunk size. 5MB is the default.
var provider = new ChunkedUploadProvider(uploadSession, graphClient, ms, maxChunkSize);

// This will query the service and make sure the remaining ranges are accurate.
uploadSession = await provider.UpdateSessionStatusAsync();

// Since the remaining ranges is now accurate, this will return the requests required to
// complete the upload.
var chunkRequests = provider.GetUploadChunkRequests();

...

如果您有更多状态,则可以跳过上述某些内容。例如,如果您已经有一个ChunkedUploadProvider,但不知道它是正确的(也许它已序列化到磁盘等),则可以通过调用UpdateSessionStatusAsync来开始该过程。

仅供参考,您可以查看ChunkedUploadProvider here的代码,以防万一,了解幕后的情况。