HTTP请求无法使用Microsoft Graph API获取联系人照片

时间:2018-04-20 15:19:29

标签: microsoft-graph

如果我使用库@ microsoft / microsoft-graph-client,我可以将联系人照片作为二进制数据,将其转换为base64并使用以下代码获取正确的照片:

    const request = require('request')
    const microsoftGraph = require('@microsoft/microsoft-graph-client');

    let token = token-value
    let client = getMicrosoftGrapClient(token);
    let id = contact-id;
    let url = '/me/contacts/' + id + '/photo/$value';

                client.api(url).get().then((res) => {
                    //console.log(res);
                    var encodedImage = new Buffer(res, 'binary').toString('base64');
                    console.log("encodedImage>>>>>>>>>>>>>>>>>>>>>>")
                    console.log (encodedImage);
                }).catch((err) => {
                    console.log(err);
                });;

    function getMicrosoftGrapClient (token) {
        // Create a Graph client
            return microsoftGraph.Client.init({
            authProvider: (done) => {
            // Just return the token
            done(null, token);
            }});
    }

我无法使用HTTP GET获取正确的联系人照片。 HTTP     响应代码是200,但正文不是照片的二进制数据。     请让我知道错误是什么。这是代码:

const request = require('request')

request({ 

    url: "https://graph.microsoft.com/v1.0/me/contacts/{contact_id}/photo/$value",

    method: 'GET',

    headers: {
        'content-type': 'image/jpg',  
        'Authorization': 'Bearer {token}'
    }

 }, function (error, response, body){

    console.log(error);

    var encodedImage = new Buffer(body, 'binary').toString('base64');

    console.log(encodedImage);
 });

1 个答案:

答案 0 :(得分:1)

编码需要明确指定为

 encoding: null

在这种情况下,正文将是Buffer类型,而不是默认值(string)。

content-type可以省略。

示例

request({
        url: "https://graph.microsoft.com/v1.0/me/photo/$value",
        method: 'GET',
        encoding: null,
        headers: {
            'Authorization': 'Bearer ' + accessToken,
        }
    }, function (error, response, body) {
        var encImage = new Buffer(body, 'binary');
        fs.writeFileSync(filePath, encImage );
    });