2016-10-12 1 views
1

С помощью .NET SDK для Microsoft Graph вы можете загружать (небольшие) файлы. Пример here.Microsoft Graph - .NET SDK - OneDrive Загрузка большого файла (> 4 МБ)

Как загрузить большой файл (> 4 МБ) с помощью .NET SDK?

Иными словами, можно ли использовать SDK для реализации "Upload large files with an upload session"?

ответ

0

Это будет доступно в следующей версии клиентской библиотеки .NET Microsoft Graph. Он будет работать так же, как и функциональность в клиентской библиотеке .NET OneDrive. Вы можете просмотреть это в моей работе branch. Вы можете предоставить обратную связь в репо.

+0

Это замечательно! Я посмотрю код. Благодарю. – horacioj

+0

> Я тестировал код в/MIchaelMainer/working branch, и он работал нормально. На самом деле, это нормально для рабочих учетных записей, но он не работает («Ошибка аутентификации») для личных учетных записей (даже небольших файлов). В документации ничего не говорится об этой функции только для учетных записей. Может, это так? Или есть ошибка? Если это ошибка, я не вижу в коде, где это может быть, потому что единственным отличием является тип учетной записи. (связанный: https://github.com/microsoftgraph/msgraph-sdk-dotnet/issues/61) – horacioj

0

Вот код, который я написал недавно, используя 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); 
        } 
Смежные вопросы