【问题标题】:Display thumbnail from Azure AD Graph API in html img在 html img 中显示来自 Azure AD Graph API 的缩略图
【发布时间】:2017-07-15 19:29:44
【问题描述】:

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

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

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

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

【问题讨论】:

  • 有没有试过把图片转成Base64再显示?像let image = btoa(response.thumbnailPhoto); 然后src="data:image/png;base64,{image}"
  • @cameron 试过了。未捕获的 DOMException:无法在“Window”上执行“btoa”:要编码的字符串包含 Latin1 范围之外的字符。
  • 试试btoa(unescape(encodeURIComponent(response.thumbnailPhoto))) 我不知道这是否适用于.png文件。
  • 没有错误,但也没有图片:(

标签: angular adal azure-ad-graph-api


【解决方案1】:

不熟悉 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();

})

【讨论】:

【解决方案2】:

您可能需要使用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));
        }

【讨论】:

  • 我没有使用 C#。我正在尝试在 JavaScript 中做这个客户端(恰好是 Angular 2)。如果没有办法做到这一点,我想我可以在服务器端做到这一点(我确实有一个我的客户端与之交谈的 C# API)但现在我正试图在客户端完全做到这一点。 (更新问题以使其更清楚)
  • @Stephen Ah 好的。您必须找到一个 JavaScript 库来执行此操作。 Here's 一些有用的 npm 包。个人在 JS 中没有这样做过,所以我没有很好的建议。
  • 谢谢。下周有机会时我会四处看看,但我希望我能更新我正在尝试做的事情,从什么转换为 base64
猜你喜欢
  • 1970-01-01
  • 2023-01-19
  • 2012-03-03
  • 1970-01-01
  • 2012-11-30
  • 2011-11-28
  • 2014-12-13
  • 2019-01-20
  • 1970-01-01
相关资源
最近更新 更多