Создание вложенных каталогов в OneDriveForBusiness с помощью GraphServiceClient - PullRequest
0 голосов
/ 28 августа 2018

Я пытался использовать Microsoft Graph Api для связи с бизнесом одного диска пользователя в веб-приложении MVC, настроил все с делегированными разрешениями и могу читать и записывать данные в ODB зарегистрированного пользователя, но есть ли каким образом можно создать вложенную папку или структуру каталогов?

В настоящее время я использую приведенный ниже код для создания папки в корне ODB пользователя и работает нормально, но ищу способ создания иерархии папок, когда указан путь до загрузки файла в него.

 DriveItem rootDirectory = graphServiceClient.Me.Drive.Root.Children.Request().AddAsync(new DriveItem
            {
                Name = "RootDirectory",
                Folder = new Folder(),
            }).Result;

И для другой папки внутри RootDirectory пытается это сделать, но, похоже, не работает (где rootDirectory - объект, созданный выше)

 DriveItem subDirectory = graphServiceClient.Me.Drive.Root.Children.Request().AddAsync(new DriveItem
            {
                Name = "SubDirectory",
                Folder = rootDirectory.Folder
            }).Result;

Даже если это работает с некоторым исправлением, не уверен, что это самый оптимальный способ сделать это, предложения будут оценены.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Я сделал для этого небольшую функцию.

Хотя верно то, что использование try-catch не является наилучшей практикой, в конце я думаю, что это лучше, чем рекурсивный опрос каждой папки на предмет ее дочерних элементов, а затем поиск по имени, если есть часть пути.

public async Task CreateFolder(string foldername)
{
  string[] splitted = foldername.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries);
  var f = graphServiceClient.Me.Drive.Root;
  string p = "";
  IDriveItemRequestBuilder b;
  DriveItem driveItem;
  foreach (string folder in splitted)
  {
    p = string.Format("{0}{1}{2}", p, string.IsNullOrEmpty(p) ? "" : "/", folder);

    b = graphServiceClient.Me.Drive.Root.ItemWithPath(p);
    try
    {
      driveItem = await b.Request().GetAsync();
    }
    catch
    {
      driveItem = null;
    }
    if (driveItem == null)
    {
      var f2 = await f.Children.Request().AddAsync(new DriveItem()
      {
        Name = folder,
        Folder = new Folder()
      });

      b = graphServiceClient.Me.Drive.Root.ItemWithPath(p);
    }
    f = b;
  }
}

и вы звоните так:

await CreateFolder("folder1/folder2/folder3");
0 голосов
/ 31 августа 2018

но ищет способ создать иерархию папок, когда указан путь до загрузки файла в него.

Исходя из моего опыта hierarchy of the folders в настоящее время не поддерживается GraphServiceClient.

Если вы хотите создать подпапку, она требует, чтобы родительская папка существовала.

В качестве обходного пути мы могли бы создать подпапку со следующим кодом. Вы также создаете рекурсивная функция для создания вложенной функции

var folder= graphserviceClient.Me.Drive.Root.Children.Request()
            .AddAsync(new DriveItem
            {
                Name = "tomfolder",
                Folder = new Folder()
            }).Result;

var subfolder = graphserviceClient.Me.Drive.Items[folder.Id].Children.Request()
                .AddAsync(new DriveItem 
                {
                  Name = "subfolder",
                  Folder = new Folder()}
                ).Result;

И вы также можете передать свои хорошие идеи лазурной команде.

...