仅使用Javascript从Active Directory显示thumbnailPhoto - Base64编码问题

时间:2015-10-15 12:00:45

标签: javascript active-directory base64

这是我正在尝试做的事情: 从仅使用Javascript的html页面我试图查询Active Directory并检索一些用户的属性。 我成功了(感谢一些有用的代码,我刚刚清理了一下)。 我可以在我的html页面上显示我在代码中提供“samAccountName”的用户的“displayName”,这很棒。

但我也想显示“thumbnailPhoto”,在这里我遇到了一些问题...... 我知道AD提供“thumbnailPhoto”作为字节数组,我应该能够在标签中显示它如下:

<img src="data:image/jpeg;base64," />

在src属性的末尾包含base64编码的字节数组。

但我根本无法编码。 我尝试使用以下库进行base64编码: https://github.com/beatgammit/base64-js

但是不成功,它表现得像AD属性一样没有返回,但照片真的在那里我可以在Outlook或Lync上看到它。 此外,当我直接将该返回值放入控制台时,我可以看到一些奇怪的字符,所以我猜有些东西但不确定应该如何处理。

尝试使用typeof来查找变量类型是什么,但它返回“undefined”。

我在这里添加我使用的代码:

var ADConnection = new ActiveXObject( "ADODB.connection" );
var ADCommand = new ActiveXObject( "ADODB.Command" );
ADConnection.Open( "Data Source=Active Directory Provider;Provider=ADsDSOObject" );
ADCommand.ActiveConnection = ADConnection;

var ou = "DC=XX,DC=XXXX,DC=XXX";
var where = "objectCategory = 'user' AND objectClass='user' AND samaccountname='XXXXXXXX'";
var orderby = "samaccountname ASC";
var fields = "displayName,thumbnailPhoto";
var queryType = fields.match( /,(memberof|member),/ig ) ? "LDAP" : "GC";
var path = queryType + "://" + ou;

ADCommand.CommandText = "select '" + fields + "' from '" + path + "' WHERE " + where + " ORDER BY " + orderby;

var recordSet = ADCommand.Execute;
fields = fields.split( "," );
var data = [];
while(!recordSet.EOF)
{
    var rowResult = { "length" : fields.length };
    var i = fields.length;

    while(i--)
    {
        var fieldName = fields[i];

        if(fieldName == "directReports" && recordSet.Fields(fieldName).value != null)
        {
            rowResult[fieldName] = true;
        }
        else
        {
            rowResult[fieldName] = recordSet.Fields(fieldName).value;
        }
    }
    data.push(rowResult);
    recordSet.MoveNext;
}
recordSet.Close();

console.log(rowResult["displayName"]);
console.log(rowResult["thumbnailPhoto"]);

(我用X替换了数据库信息)

(只返回一个条目,这就是我在控制台中使用rowResult而不是数据的原因)

以下是控制台返回的内容:

  

日志:姓氏,名字

     

日志:က䙊䙉ā怀怀

(此处返回的姓氏和名字是预期的正确值)

这一切都在IE9上运行,不幸的是必须使它与IE9兼容:/

要点:

  • 我只需要在Javascript中找到解决方案
  • 我知道它应该返回一个字节数组,我需要对它进行base64编码,但是我的所有尝试都失败了,我对它的原因有点无能为力
  • 我不确定图片是否在这里完全返回,控制台中的东西看起来很小......或者如果我没有正确地进行编码

如果有人可以帮我解决这个问题,那就太棒了,我现在已经挣扎了这么久了:/

谢谢!

0 个答案:

没有答案