Microsoft Graph API - чтение списка Office 365 SharePoint и извлечение данных (изображений)

Отражение следующего сообщения: Microsoft Graph API - Office 365 Доступ к элементам вложенных папок SharePoint

Я могу получить список изображений через Graph API. У меня есть приложение MVC Azure, в котором я выполняю эти вызовы Graph API.

Однако, когда я пытаюсь получить доступ к изображению через свойство webUrl, я получаю отказ в доступе.

Мне удалось обойти это, используя свойство @microsoft.graph.downloadUrl, к которому я могу получить доступ, загрузить его через HttpClient convert to Byte Array и преобразовать в Thumbnail.

Однако в идеале я мог бы просто использовать свой сайт MVC для нарезки конечной точки графа, а затем просто передать webUrl, чтобы мне не приходилось обрабатывать изменение размера или сохранение байтовых данных изображения.

Во-первых, почему webUrl return Access Denied?

Во-вторых, как лучше всего просто передать URL-адрес изображения через мое приложение MVC? Я не хочу быть ответственным за размещение / преобразование имиджа. Доступ к данным должен быть открыт публично.


person aherrick    schedule 29.03.2018    source источник


Ответы (1)


Есть несколько способов сделать это, но, учитывая, что вы хотите показать эскиз, я бы посмотрел на _ 1_ конечная точка:

GET /sites/{site-id}/drive/items/{item-id}/thumbnails

Вы можете использовать это вместе с конечной точкой /content для получения самого двоичного файла:

GET /me/drive/items/{item-id}/thumbnails/{thumb-id}/{size}/content

Что касается того, что делать с двоичным результатом, я обычно кодирую его в Base64 на бэкэнде и возвращаю клиенту URL-адрес данных. Вы также можете кэшировать этот результат, и ваш метод просто проверит наличие действительной кэшированной копии, прежде чем делать новый запрос к Graph.

Это особенно хорошо работает с фотографиями профиля и миниатюрами, где данных довольно мало.

Пример того, как вы могли бы сделать это на C # с помощью .NET Graph Client SDK:

var imageStream = await graphClient.Me
    .Photo
    .Content
    .Request()
    .GetAsync();

using (var memoryStream = new MemoryStream())
{
    imageStream.CopyTo(memoryStream);
    var base64pic = Convert.ToBase64String(memoryStream.ToArray());
    return "data:image;base64," + base64pic;
}
person Marc LaFleur    schedule 29.03.2018
comment
Значит ли это, что мне нужно сделать отдельный запрос графика для каждого изображения в списке? - person aherrick; 29.03.2018
comment
Кроме того, есть ли какие-либо мысли о том, почему webUrl отказано в доступе? Кроме того, могу ли я не просто открыть саму конечную точку изображения, чтобы мне не приходилось кэшировать мою сторону? - person aherrick; 29.03.2018
comment
Продвигается! Оказывается, конечная точка эскиза является общедоступной, и я могу просто отправить этот URL-адрес со своей конечной точки. - person aherrick; 29.03.2018
comment
webUrl используется для открытия документа в редакторе (т. Е. Открытия .docx в Word Online). Это требует, чтобы вы прошли аутентификацию как часть этого процесса. - person Marc LaFleur; 29.03.2018