Ошибка Microsoft Graph - не найден ресурс для сегмента "корень:" при загрузке файла в OneDrive

При работе с это руководство на Uploading File to OneDrive от команды Microsoft Graph OneDrive, я получаю следующую ошибку в последней строке кода, показанного ниже:

Примечания. В Интернете есть несколько сообщений по соответствующей проблеме (например: Это или это или это или this или this). Но все они, кажется, имеют разный контекст или не имеют ответа.

Вопрос: в чем может быть проблема и как ее решить

Ресурс не найден для сегмента "корень:"

Соответствующий код:

GraphServiceClient graphClient = ProviderManager.Instance.GlobalProvider.Graph;

var picker = new Windows.Storage.Pickers.FileOpenPicker();
....
picker.FileTypeFilter.Add("*");

Windows.Storage.StorageFile file = await picker.PickSingleFileAsync();
if (file != null)
{
    // Application now has read/write access to the picked file
    // request 1 - upload small file to user's onedrive

  Stream fileStream = await file.OpenStreamForReadAsync();
  DriveItem uploadedFile = await graphClient.Me.Drive.Root
                                .ItemWithPath(file.Path)
                                .Content
                                .Request()
                                .PutAsync<DriveItem>(fileStream);
}



Ответы (1)


.ItemWithPath(file.Path) не путь к файлу, который вы загружаете, это путь назначения.

Например, если вы хотите загрузить SomeFile.txt в корневой каталог OneDrive, вы должны использовать:

graphClient.Me.Drive // The drive
  .Root // The drive's root folder
  .ItemWithPath("SomeFile.txt") // The destination to write the upload to

Причина, по которой это в настоящее время не работает, заключается в том, что OneDrive не знает, что делать с путем к диску Windows (т. Е. C:\Files\Documents\SomeFile.txt). Ожидается безопасный URL-адрес диска (например, /Documents/SomeFile.txt).

person Marc LaFleur    schedule 13.07.2020
comment
О, так, например, мой OneDrive отображается на путь моего Windows - 10 проводника файлов C:\MyFolder. Кроме того, структура папок OneDrive имеет встроенные папки Attachments, Documents, Pictures. Следовательно, использование graphClient.Me.Drive.Root.ItemWithPath("/Documents/SomeFile.txt") приведет к загрузке файла во встроенную папку OneDrive Documents, правильно? - person nam; 13.07.2020