2016-12-22 2 views
1

Мы пытаемся реализовать интеграцию между веб-приложением и SharePoint Online с помощью API-интерфейсов API Microsoft Graph.Загрузите файл на диск SharePoint с помощью Microsoft Graph

В частности, нам необходимо загрузить файл в библиотеку документов конкретного документа SharePoint (диск), отличную от текущего диска по умолчанию для пользователя. Мы получаем маркер доступа через Azure AD с доступом ко всем файлам.

Мы можем загружать файлы на любой диск, используя /v1.0/me/drive/..., но не тогда, когда мы используем другой диск.

Например:

var response = client.PutAsync(graphResourceUrl + 
    "/beta/sharepoint/sites/" + siteCollSiteId + 
    "/lists/" + listId + 
    "/drive/root/children/" + fileName + ":/content", 
    new ByteArrayContent(fileBytes)).Result; 

var response = client.PutAsync(graphResourceUrl + 
    "/beta/drives/" + "/" + listId + 
    "/items/" + siteCollSiteId + "/" + fileName + ":/content", 
    new ByteArrayContent(fileBytes)).Result; 

var response = client.PutAsync(graphResourceUrl + 
    "/beta/drives/" + listId + "/" + fileName + ":/content", 
    new ByteArrayContent(fileBytes)).Result; 

Оба /v1.0 и /beta (в случае SharePoint, содержащего путь) мы получаем ответ ошибки Not Implemented.

Что мы можем делать неправильно? Разве это еще не работает с Microsoft Graph (кроме /me)?

+0

WHI вы запросили? Вам нужно иметь «Sites.ReadWrite.All» для доступа к библиотекам документов вне диска пользователя по умолчанию. –

+0

Спасибо @ ryan-gregg, да, мы используем это разрешение для Graph в приложении Azure AD, его отображаются как «Чтение и запись файлов во всех семействах сайтов (предварительный просмотр)». С уважением, Дэнфер. – danfer

ответ

1

Удалить : из :/content Вообще это лучше для меня, чтобы получить driveId библиотеки зр, а затем просто работать на v1.0 конечной точке с /v1.0/drive/{driveId}/

+0

Извините, но при использовании предложения /v1.0/drive/{driveId}/ Я получаю 400 запросов с плохим ответом, пытаясь загрузить файл на диск на сайте sharepoint, к которому у меня есть доступ. С уважением, Данфер. – danfer

+1

@ danfer Обратите внимание на детали (driveS not drive) 'final Конечная точка строки = String.format ("% s/drives /% s/items /% s/children /% s/content ", Config.GRAPH_RESOURCE_URL, driveId, itemId, targetName); ' – lolet

+1

вы должны использовать /v1.0/drives/{driveid}, не забывайте 's' в дисках –

1

Для того, чтобы получить все файлы на диске с помощью v1.0, вам сначала нужно получить токен доступа (который, как я вижу, вы уже передали), затем получить «идентификатор диска» и использовать следующий URL (обратите внимание: его не «диск» это «диски»):

https://graph.microsoft.com/v1.0/drives/{drive-id}/root/children 

Чтобы получить идентификатор дисковода, я сделал следующий запрос GET с помощью почтальона, этот список будет все диски на сайте и вы сможете получить идентификатор этого диска:

https://graph.microsoft.com/v1.0/sites/{tenant}.sharepoint.com:{path-to-site(ie: /sites/HR)}:/drives 

Чтобы ответить на ваш вопрос относительно Загрузка файлов, вы будете делать запрос PUT к следующему URL-адресу:

https://graph.microsoft.com/v1.0/drives/{drive-id}/root:/{folder-name}/{file-name.txt}:/content 

Вам нужно будет установить два необходимых заголовков:

  • авторизации
  • Content-Type

Далее вы передадите двоичный поток файла в тело запроса.

Другие полезные элементы

Получить все файлы внутри папки:

https://graph.microsoft.com/v1.0/drives/{drive-id}/root:/{folder-name}:/children 

Получает содержимое пользователей OneDrive:

https://graph.microsoft.com/v1.0/me/drive/root/children 

ССЫЛКА: https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/api/driveitem_put_content#example-upload-a-new-file

Смежные вопросы