从O365获取用户个人头像 - microsoft graph api

时间:2016-01-08 07:20:15

标签: angularjs office365 microsoft-graph

我尝试使用Microsoft Graph API从O365获取用户个人资料照片。当我使用以下API时,它仅返回与配置文件pic相关的元数据。

https://graph.microsoft.com/beta/me/photo

通过https://graph.microsoft.com/beta/me/photo/ $ value返回一个没有任何意义的乱码对象。但是,我认为这是与用户配置文件相关的数据。需要帮助将这些数据提取到base64。

2 个答案:

答案 0 :(得分:1)

返回的数据是图像类型的二进制数据。如果您使用JavaScript来检索用户照片,请在XMLHttpRequest中将照片数据作为blob类型获取,然后从响应中检索blob URL。供您参考:

 var request = new XMLHttpRequest;
 var photoUri=config.endpoints.graphApiUri + "/v1.0/me/photo/$value";
 request.open("GET",photoUri);
 request.setRequestHeader("Authorization","Bearer "+token);
 request.responseType = "blob";
 request.onload = function (){

 if(request.readyState == 4 && request.status == 200){

 var image = document.createElement("img");
 var url = window.URL || window.webkitURL;
 var blobUrl = url.createObjectURL(request.response);
 image.src = blobUrl;
  document.getElementById("UserShow").appendChild(image);
 }

 };
 request.send(null); 

答案 1 :(得分:0)

要使该照片在视图中可见,我们必须将响应转换为64字节。 我已经通过以下代码在项目中完成了此操作。希望这个答案对某人有用。

 HttpResponseMessage response1 =  await httpClient.GetAsync("https://graph.microsoft.com/v1.0/me/photos/96x96/$value");
 using (Stream responseStream = await response1.Content.ReadAsStreamAsync())
{
using (FileStream fs = new FileStream(@"D:\image.jpg", FileMode.Create))
 {
     MemoryStream ms = new MemoryStream();
    responseStream.CopyTo(ms);
    byte[] buffer = ms.ToArray();
   string result = Convert.ToBase64String(buffer);
    HttpContext.Session[AppConstants.UserImage] = String.Format("data:image/gif;base64,{0}", result);
    responseStream.Close();
    }
}