SharePoint REST 显示当前用户个人资料图片

SharePoint REST show current user profile picture

当通过 REST 从当前用户的个人资料中获取 URL 时,图像标签在更新 src 时无法显示:

<img id="escMyPic" src="" alt="" />

<script type="text/javascript">
$.ajax({
    url: strURL + "/_api/sp.userprofiles.peoplemanager/getmyproperties",
    type: "GET",
    headers: {
        "accept": "application/json;odata=verbose",
    },
    success: MyPictureSucceeded,
    error: MyPictureFailed
});
function MyPictureSucceeded(data) {
    if(data.d.PictureUrl != null) {
        $('#escMyPic').attr('src', data.d.PictureUrl);
    }
}
function MyPictureFailed() {
        alert('Error: Unexpected error loading profile picture.');
}
</script>

return url 在 SharePoint Online 中看起来像这样: https://tenant-my.sharepoint.com:443/User%20Photos/Profile%20Pictures/email_address_MThumb.jpg?t=63601764394

它重定向到: https://tenant-my.sharepoint.com/User%20Photos/Profile%20Pictures/email_address_MThumb.jpg?t=63601764394

使用浏览器开发工具,您看到返回的 mime 类型不是 image/jpg,而是 text/plain。我已经删除了查询字符串参数,甚至将硬编码 URL 放在图像标签 src 中,但它就是不显示。开发工具中的响应主体也是空白的。它似乎在显示之前进行了重定向和身份验证。

将硬编码的URL放在浏览器地址栏时,图片显示正常,开发工具响应头显示图片为URL的内容,MIME类型是 image/jpg.

如何通过 REST 调用显示个人资料图片?

除了 returns PersonalUrl 属性 的 /_api/sp.userprofiles.peoplemanager/getmyproperties 端点之外,还可以通过 _layouts/15/userphoto.aspx?size=<size>&accountname=<accountname> 页面请求用户个人资料图片,其中

  • size - 可以设置为 S/M/L 代表 Small/Medium/Large 图片大小
  • accountname - 用户账户名

例子

var url = getMyPictureUrl(_spPageContextInfo.webAbsoluteUrl,_spPageContextInfo.userLoginName,"M");
$('#escMyPic').attr('src', url);

哪里

function getMyPictureUrl(webUrl,accountName,size){
    return webUrl + "/_layouts/15/userphoto.aspx?size=" + size + "&accountname=" + accountName;
}