Загрузка файла в онлайн-библиотеку Sharepoint - PullRequest
0 голосов
/ 19 января 2019

Я пытаюсь и не могу загрузить файл в онлайн-библиотеку документов Sharepoint с помощью C # graph sdk.

Я могу получить диск / библиотеку, но если я получу его как диск, Root будет нулевым, и я получу исключение. Если я обращаюсь к нему как к списку, я не могу использовать метод CreateUploadSession.

Получение библиотеки документов в виде списка работает:

await graphClient.Sites[SPUrl + ":"].Sites[SpPath + ":"].Lists[libId].Request().GetAsync();

Получение библиотеки Doc как накопителя по идентификатору диска не работает:

var drive = await graphClient.Sites[SPUrl + ":"].Sites[SpPath + ":"].Drives[driveId].Request().GetAsync();

Получение библиотеки документов в качестве диска ее списка:

var drive = await graphClient.Sites[SPUrl + ":"].Sites[SpPath + ":"].Lists[libId].Drive.Request().GetAsync();

Но попытка получить Root этого диска приводит к «неверному запросу: указанный URL недействителен». То же самое можно сказать и о Drive.Items.Request (). Но, насколько я могу судить, мне нужен рут-диск для этого:

var uploadSession = await graphClient.Sites[SPUrl + ":"].Sites[SpPath + ":"].Lists[libId].Drive.Root.ItemWithPath(file.FileName).CreateUploadSession().Request().PostAsync();

Но у меня есть три библиотеки документов, и все они показывают Root как ноль. Я явно что-то упускаю, но мне непонятно, что.

1 Ответ

0 голосов
/ 20 января 2019

Действительно, в случае, если сайт адресован по URL-адресу сервера , следующий запрос

GET https://graph.microsoft.com/v1.0/sites/{hostname}:/{server-relative-path}:/drive

завершается успешно и возвращает диск по умолчанию, а следующее:

GET https://graph.microsoft.com/v1.0/sites/{hostname}:/{server-relative-path}:/drive/root

не удается и возвращает ошибку Url specified is invalid.

Кажется, это ошибка с самой Microsoft Graph. В любом случае можно использовать следующую опцию для загрузки файла в библиотеку.

Предполагается, siteUrl соответствует относительному URL сервера сайта и listId к уникальному идентификатору библиотеки

Он состоит из следующих шагов:

  • разрешение сайта по URL-адресу сервера
  • доступ к корневой папке для библиотеки
  • загрузить файл

Пример * +1034 *

//1.resolve site by server relative url
var targetSite = await graphClient.Sites.GetByPath(siteUrl,hostName).Request().GetAsync();    //2.access root folder for for a Library
var targetFolder = graphClient.Sites[targetSite.Id]
       .Lists[listId]
       .Drive
       .Root;

 //3.Upload a file
 var pathToFile = @"c:\Temp\Guide.docx";
 using (var fileStream = new FileStream(pathToFile, FileMode.Open, FileAccess.Read))
 {
      var uploadedItem = await targetFolder
        .ItemWithPath("Guide.docx")
        .Content
        .Request()
        .PutAsync<DriveItem>(fileStream);
 }

, где

  • hostName - это имя хоста семейства сайтов (например, contoso.sharepoint.com)
  • siteUrl - URL сервера относительно сайта, например, /sites/management
...