这是我正在尝试做的事情: 从仅使用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兼容:/
要点:
如果有人可以帮我解决这个问题,那就太棒了,我现在已经挣扎了这么久了:/
谢谢!