在 html img 中显示来自 Azure AD Graph API 的缩略图

Display thumbnail from Azure AD Graph API in html img

我可以成功获取用户图像的 png 数据,但无法将其显示在 img 元素中。 (我通过调用 - https://graph.windows.net/{my tenant}/users/{my user}/thumbnailPhoto?api-version=1.6 获取数据)

我试过了 来源="data:image/png;base64,{THE_DATA_HERE}" 但这似乎不起作用。 (在此处粘贴数据 - http://codebeautify.org/base64-to-image-converter 也没有用,显然它不是 base64)

关于如何让这个结果出现在 img 中的任何想法? (这是在 JavaScript - 客户端完成的)

我正在使用 Angular 2 并且必须先通过 DOM Sanitizer.bypassSecurityTrustUrl 传递结果,然后才能将其应用于 src,所以我的代码可能不太正确然而。有人可以在任何基于浏览器的客户端中使用它吗?

您可能需要使用 IStreamFetcher 来请求图像。有一个示例 here 可以执行此操作。

        IUser sUser = (IUser) signedInUser;
        IStreamFetcher photo = (IStreamFetcher) sUser.ThumbnailPhoto;
        try
        {
            DataServiceStreamResponse response =
                await photo.DownloadAsync();
            Console.WriteLine("\nUser {0} GOT thumbnailphoto", signedInUser.DisplayName);
        }
        catch (Exception e)
        {
            Program.WriteError("\nError getting the user's photo - may not exist {0}",
                Program.ExtractErrorMessage(e));
        }

不熟悉 Angular2,但是很容易使用 JavaScript 显示基于 Azure AD Graph REST 的缩略图,如下所示:

var oReq = new XMLHttpRequest();
oReq.open("GET", "https://graph.windows.net/{teantId}/users/user1@xxx.onmicrosoft.com/thumbnailPhoto?api-version=1.6", true);
oReq.setRequestHeader("authorization","bearer {access_token}")
oReq.responseType = "blob";

oReq.onload = function(oEvent) {

var imageUrl = window.URL.createObjectURL(oReq.response);
var img = document.createElement('img');
img.src = imageUrl ;
document.body.appendChild(img);  

};

oReq.send();

})