Как реализовать возобновляемую загрузку с использованием Microsoft.Graph.GraphServiceClient из C # - PullRequest
0 голосов
/ 17 июня 2019

Кто-нибудь знает, как использовать C # OneDrive SDK для выполнения возобновляемой загрузки?

Когда я использую IDriveItemRequestBuilder.CreateUploadSession, я всегда получаю новый сеанс со сбросом NextExpectedRanges. Если я использую .UploadURL и вручную отправляю сообщение HTTP, я получаю правильные значения, следующие диапазоны возвращаются, однако я не знаю способов возобновления сеанса загрузки с использованием SDK. Похоже, что у API нет средств для OpenUploadSession или, по крайней мере, я могу найти. Не могу найти и рабочий пример. Я подозреваю, что это обычный случай использования.

Обратите внимание, что ключевые слова в тексте - Resumable .

1 Ответ

0 голосов
/ 27 июня 2019

Способ возобновления зависит от того, сколько у вас состояния. Требуемый минимум освобождения составляет 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 здесь на тот случай, если будет полезно увидеть, что происходит под одеялом.

...