使用Node.js与activedirectory2读取AD的thumbnailPhoto并在SVG中显示
嘿,这就帮你把这些问题捋清楚:
1. AD中thumbnailPhoto的存储类型
首先明确:Active Directory里的thumbnailPhoto属性存储的是二进制的JPEG图像数据,这是AD默认的用户头像存储格式。你看到三张测试照片的Base64开头一致完全正常——因为JPEG文件的起始字节是固定的(FF D8 FF),转成Base64后自然会以/9j/4AAQSkZJRgABAQEAYABgAAD/...这类字符串开头。
2. 读取并转Base64的正确方式
你现在写的转码代码是没问题的:
var buf = Buffer.from(user['thumbnailPhoto']); var b64 = buf.toString('base64');
从AD获取的thumbnailPhoto本身就是二进制数据(可能是Buffer或Uint8Array),用Buffer.from()包裹的处理逻辑完全正确。
3. 在SVG中展示的关键:Base64前缀
要在SVG里用这个Base64数据显示图片,必须给它加上data URI前缀,格式是:
data:image/jpeg;base64,
把这个前缀和你的b64字符串拼接起来,就能作为SVG中<image>元素的href(或xlink:href,兼容旧版本SVG)属性值。
完整示例代码
如果是动态生成SVG,可以这么写:
// 假设已获取到目标user对象 var buf = Buffer.from(user['thumbnailPhoto']); var b64 = buf.toString('base64'); var dataUri = `data:image/jpeg;base64,${b64}`; // 创建SVG元素并添加图片 var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); svg.setAttribute('width', '120'); svg.setAttribute('height', '120'); var img = document.createElementNS('http://www.w3.org/2000/svg', 'image'); img.setAttribute('x', '0'); img.setAttribute('y', '0'); img.setAttribute('width', '120'); img.setAttribute('height', '120'); img.setAttribute('href', dataUri); // 旧环境可改用xlink:href svg.appendChild(img); document.body.appendChild(svg);
如果是静态SVG文件,直接把拼接好的data URI填到<image>的href里即可:
<svg width="120" height="120" xmlns="http://www.w3.org/2000/svg"> <image x="0" y="0" width="120" height="120" href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD..." /> </svg>
内容的提问来源于stack exchange,提问作者Zorry
相关产品推荐
相关产品推荐

