Как прочитать файл из onedrive другого пользователя

#microsoft-graph-api

#microsoft-graph-api

Вопрос:

У меня есть файл Excel с именем «demo.xlsx » загружено в корневую папку onedrive пользователя A. Этот файл содержит таблицу с именем «EmployeeTable». Я хочу войти в свое приложение как другой пользователь — пользователь «B» и прочитать данные из этой таблицы.

Я попытался войти в систему как пользователь B и получить доступ к данным с помощью https://graph.microsoft.com/v1.0/users/8e92a7895e495d6623/drive/root:/demo.xlsx:/workbook/tables(‘EmployeeTable’)/rows

здесь 8e92a7895e495d6623 — идентификатор пользователя A. Но я получаю следующую ошибку:

 statusCode: 404, 
code: "itemNotFound",
body."message":"Item does not exist"
 

Я попытался поделиться файлом с пользователем B, войдя в onedrive как пользователь A и используя опцию «поделиться», но я все еще получаю вышеуказанную ошибку.

Когда я вхожу в свое приложение как пользователь A и использую тот же URI, что и упомянутый выше, я могу правильно извлечь данные.

Может кто-нибудь подсказать мне, как прочитать файл Excel из папки onedrive другого пользователя? Я хочу иметь возможность хранить этот файл Excel в общей области, например, в папке onedrive пользователя, и иметь возможность считывать его несколькими пользователями.

Примечание: приложение, которое я создал, основано на https://github.com/microsoftgraph/angular-excelstarter-sample

Ответ №1:

Если пользователь A совместно использует файл с пользователем B, а пользователь B в данный момент зарегистрирован в приложении, вызовите конечную точку

 https://graph.microsoft.com/v1.0/me/drive/sharedWithMe
 

Ответ будет содержать все файлы, которыми поделился пользователь B. Найдите нужный вам файл. Ответ должен содержать remoteItem узел с parentReference дочерним узлом.

 "@odata.type": "#microsoft.graph.driveItem",
"createdDateTime": "2021-01-05T09:51:23Z",
"id": "01BDYTYLL573DF4J3A2JG3WPFKMZLLBPQD",
...
"remoteItem": {
    "id": "01BDYTYLL573DF4J3A2JG3WPFKMZLLBPQD",
    "parentReference": {
        "driveId": "b!RdjejBSERkqd6KyrlECzSlClLPMHvAxIle01z5BIuc0OlAR_j4bQQ5j8LT1dXapM",
        "driveType": "business",
        "id": "01BDYTYLN6Y2GOVW7725BZO354PWSELRRZ"
    },
....
 

Используйте driveId и удаленный элемент id и вызывайте эту конечную точку для доступа к данным

   https://graph.microsoft.com/v1.0/drives/{driveId}/items/{id}/workbook/tables('EmployeeTable')/rows
 

Комментарии:

1. Спасибо за ваш ответ. Я попытался войти в свое приложение как пользователь B и получить доступ к graph.microsoft.com/v1.0/me/drive /… URI, но это возвращает пустой ответ, хотя пользователь A предоставил общий доступ к файлу пользователю B ` { «@odata.context»: » graph.microsoft.com/v1.0 /$метаданные#Коллекция (элемент привода) «, «значение»: [] } ` Мне пришлось добавить allowexternal=true к URI, поскольку оба пользователя находятся в разных организациях. Какие-нибудь советы о том, как решить эту проблему?