Получение изображения из публикации Sharepoint с помощью Microsoft Graph - PullRequest
0 голосов
/ 17 сентября 2018

Моя компания сделала специальное фото-поле в Sharepoint для своих новостей. Я пытаюсь использовать Microsoft Graph для получения изображений, но безуспешно.

Это описание столбцов:

{ 
        "columnGroup": "Page Layout Columns",
        "description": "",
        "displayName": "Thumbnail image",
        "enforceUniqueValues": false,
        "hidden": false,
        "id": "XXXXXXX-XXXX-XXXX-XXX-XXXXXXXXXXXX",
        "indexed": false,
        "name": "PublishingPageImage",
        "readOnly": false,
        "required": false
    },

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

GET https://graph.microsoft.com/beta/sites/{site-id}/lists/{list-id}/items?expand=fields(select=Column1,Column2)

Хотя - как бы я ни писал запрос, я не могу получить поле изображения.

Моя последняя попытка была такой:

https://graph.microsoft.com/beta/sites/knowit.sharepoint.com/lists/posts/items?expand=fields(select=PublishingPageImage)

Ответ, который я получил от Microsoft, был следующим:

{
"error": {
    "code": "-1, Microsoft.SharePoint.Client.ClientServiceException",
    "message": "Cannot serialize data for type Microsoft.SharePoint.Publishing.Fields.ImageFieldValue.",
    "innerError": {
        "request-id": "f25e4851-0c1b-4061-ad6a-948d38004046",
        "date": "2018-09-17T14:03:01"
    }
}

}

Должен ли я использовать что-то вроде .value или .data или .ImageUrl после запроса? Если я получу ссылку или значение данных, это не имеет значения. В вызове /me/ для пользователей Microsoft есть свойство $value для получения фотографии профиля пользователя. Это что-то вроде этого?

1 Ответ

0 голосов
/ 18 сентября 2018

Зависит от того, как хранится изображение. Если это вложение, вы можете сделать следующее:

  string baseURL = $"https://{spTenant}/_api/web/lists('{ AA.config.listID}')/items({ siteData.Id})/AttachmentFiles";
        string fileName = await GetFileNameAsync(baseURL);
        string getPictureReqUrl = $"{baseURL}('{fileName}')/$value";
        Stream responseStream = await GetPictureAsync(getPictureReqUrl);

     private static async Task<Stream> GetPictureAsync(string reqUrl)
    {
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", SPOToken);
        HttpResponseMessage response = await client.GetAsync(reqUrl);
        return await response.Content.ReadAsStreamAsync();
    }

Внимание! Это пока не поддерживается графиком, но вы можете использовать SharePoint Rest API

Если изображение хранится в библиотеке документов, вам нужно использовать вместо него объект Drive https://developer.microsoft.com/en-us/graph/docs/api-reference/beta/resources/drive

...